I would use SequenceEqual from LINQ since AuthorizationRuleCollection implements IEnumerable. The only problem is that AuthorizationRule does not override object.Equals() which means we need to supply a custom IEqualityComparer<AuthorizationRule> like so:
public class AuthorizationRuleEqualityComparer : IEqualityComparer<AuthorizationRule>
{
public static readonly AuthorizationRuleEqualityComparer Instance = new AuthorizationRuleEqualityComparer();
private AuthorizationRuleEqualityComparer()
{
}
public bool Equals(AuthorizationRule l, AuthorizationRule r)
{
// Compare more fields if needed.
return l.IdentityReference == r.IdentityReference;
}
public int GetHashCode(AuthorizationRule rule)
{
return rule.IdentityReference.GetHashCode();
}
}
Usage:
AuthorizationRuleCollection arc1;
AuthorizationRuleCollection arc2;
var equal = arc1
.OfType<AuthorizationRule>()
.SequenceEqual(
arc2.OfType<AuthorizationRule>(),
AuthorizationRuleEqualityComparer.Instance);