public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public Quantity Quantity { get; set; } } public class Quantity { public string Color { get; set; } public int Number { get; set; } }
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public Quantity Quantity { get; set; } public static bool operator ==(Customer Moi, Customer Autre) { return (Moi.FirstName == Autre.FirstName ) && (Moi.LastName == Autre.LastName ) && (Moi.Quantity == Autre.Quantity ); } } public class Quantity { public string Color { get; set; } public int Number { get; set; } public static bool operator ==(Quantity Moi, Quantity Autre) { return (Moi.Color == Autre.Color ) && (Moi.Number == Autre.Number ); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpublic static bool AreEquals(object objectA, object objectB) { if (objectA != null && objectB != null) { Type objectType; objectType = objectA.GetType(); foreach (PropertyInfo propertyInfo in objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.CanRead)) { object valueA = propertyInfo.GetValue(objectA, null); object valueB = propertyInfo.GetValue(objectB, null); if (typeof(IComparable).IsAssignableFrom(propertyInfo.PropertyType) || propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType.IsValueType) { if (!AreValuesEqual(valueA, valueB)) return false; //Console.WriteLine(propertyInfo.Name + " not equal"); } else if (!AreEquals(valueA, valueB)) return false; //Console.WriteLine(propertyInfo.Name + " not equal"); } return true; } return false;//là il faudra voir ce que tu veux comme résultat si au moins un des 2 est null } private static bool AreValuesEqual(object valueA, object valueB) { bool result; IComparable selfValueComparer = valueA as IComparable; //Dans l'abosule ne sert à rien, puisque cette méthode est privée et que dans l'autre on commence par vérifier qu'aucun est null if (valueA == null && valueB != null || valueA != null && valueB == null) result = false; else if (selfValueComparer != null && selfValueComparer.CompareTo(valueB) != 0) result = false; else if (!object.Equals(valueA, valueB)) result = false; else result = true; return result; }
public static void AreEquals(object objectA, object objectB) { if (objectA != null && objectB != null) { Type objectType; objectType = objectA.GetType(); foreach (PropertyInfo propertyInfo in objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.CanRead)) { object valueA = propertyInfo.GetValue(objectA, null); object valueB = propertyInfo.GetValue(objectB, null); if (typeof(IComparable).IsAssignableFrom(propertyInfo.PropertyType) || propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType.IsValueType) { if (!AreValuesEqual(valueA, valueB)) Console.WriteLine(propertyInfo.ReflectedType.Name + "." + propertyInfo.Name + " not equal"); } else { AreEquals(valueA, valueB); } } } }