Si j’ai un object de type MyBull
et une List orig
:
// Just an example MyBull x = getMeTheObjectWithIdFromDB(9); orig.add(x); // Again same? data object MyBull y = getMeTheObjectWithIdFromDB(9);
Pourquoi est-ce faux alors?
// This is false, even though all the properties // of x and y are the same. orig.Contains(y);
Par défaut, les objects exposeront une égalité basée sur les références. Si vous souhaitez des règles personnalisées, telles que l’égalité basée sur des champs id, vous devez redéfinir les méthodes Equals
et GetHashCode
.
Si vous pouvez utiliser LINQ, alors vous pouvez
class Vessel { public int id { get; set; } public ssortingng name { get; set; } }
…
var vessels = new List() { new Vessel() { id = 4711, name = "Millennium Falcon" } }; var ship = new Vessel { id = 4711, name = "Millencolin" }; if (vessels.Any(vessel => vessel.id == ship.id)) Console.Write("There can be only one!");
En effet, les instances de MyBull sont comparées par référence. Du sharepoint vue de .NET, x et y sont deux instances différentes et ne sont donc pas égales.
Pour IEquatable
vous devrez redéfinir les méthodes Equals et GetHashCode (ce qui signifie que vous devriez probablement implémenter IEquatable
et redéfinir également les opérateurs == et! =).
Votre object MyBull implémente-t-il IEquatable
? Cette méthode déterminera l’égalité de deux objects
demandé par OP
Votre classe MyBull implémenterait IEquatable
public class MyBull : IEquatable
et alors vous auriez besoin de remplacer la méthode Equals
public bool Equals(MyBull theOtherMyBull)
Comme David Neale le mentionne ci-dessous, cette méthode est mieux utilisée lorsque vous comparez des objects du même type – ce que vous êtes. Remplacer Object.Equals et Object.GetHashCode fonctionnera également.