private bool CollectionEquals(IEnumerable enum1, IEnumerable enum2, CollectionPropertyHandling handling) { if (handling == CollectionPropertyHandling.Ingore) { return(true); } var refrenceEquals = NullReferenceEquals(enum1, enum2, out var containsNull); if (containsNull || refrenceEquals) { return(refrenceEquals); } var array1 = enum1.Cast <object>().ToArray(); var array2 = enum2.Cast <object>().ToArray(); if (array1.Length != array2.Length) { return(false); } switch (handling) { case CollectionPropertyHandling.ElementEqualCompare: return(CheckElementEqualCompare(array1, array2)); case CollectionPropertyHandling.ElementPropertyCompare: return(CheckElementPropertyCompare(array1, array2)); case CollectionPropertyHandling.EqualCompare: return(enum1.Equals(enum2)); default: return(true); } }
private bool CollectionEquals(IEnumerable enum1, IEnumerable enum2, CollectionPropertyHandling handling) { if (handling == Schubert.CollectionPropertyHandling.Ingore) { return(true); } bool containsNull = false; bool refrenceEquals = PropertiesComparer.NullReferenceEquals(enum1, enum2, out containsNull); if (containsNull || refrenceEquals) { return(refrenceEquals); } Object[] array1 = enum1.Cast <Object>().ToArray(); Object[] array2 = enum2.Cast <Object>().ToArray(); if (array1.Length != array2.Length) { return(false); } switch (handling) { case Schubert.CollectionPropertyHandling.ElementEqualCompare: for (int i = 0; i < array1.Length; i++) { bool containsNullElement = false; bool elementRefrenceEquals = PropertiesComparer.NullReferenceEquals(array1[i], array2[i], out containsNullElement); if (containsNullElement) { if (!refrenceEquals) { return(false); } } else if (!array1[i].Equals(array2[i])) { return(false); } } return(true); case Schubert.CollectionPropertyHandling.ElementPropertyCompare: for (int i = 0; i < array1.Length; i++) { object element1 = array1[i]; object element2 = array2[i]; bool containsNullElement = false; bool elementRefrenceEquals = PropertiesComparer.NullReferenceEquals(element1, element2, out containsNullElement); if (containsNullElement) { if (!refrenceEquals) { return(false); } } else { Type type1 = element1.GetType(); Type type2 = element2.GetType(); type1 = type1.GetTypeInfo().IsAssignableFrom(type2) ? type1 : type2; if (!PropertyEquals(type1, element1, element2)) { return(false); } } } return(true); case Schubert.CollectionPropertyHandling.EqualCompare: return(enum1.Equals(enum2)); default: return(true); } }