我想要我的 Food
类能够在它等于 Food
的另一个实例时进行测试.稍后我会将它用于列表,我想使用它的 List.Contains()
方法。我应该实现 IEquatable<Food>
吗?或者只是重写 Object.Equals()
?来自 MSDN:
This method determines equality by using the default equality comparer, as defined by the object's implementation of the IEquatable.Equals method for T (the type of values in the list).
所以我的下一个问题是:.NET 框架的哪些函数/类使用了 Object.Equals()
?我应该首先使用它吗?
最佳答案
主要原因是性能。当 .NET 2.0 中引入泛型时,它们能够添加一堆整洁的类,例如 List<T>
。 , Dictionary<K,V>
, HashSet<T>
等。这些结构大量使用GetHashCode
和 Equals
.但是对于值类型,这需要装箱。 IEquatable<T>
让结构实现强类型 Equals
方法,因此不需要装箱。因此,在将值类型与泛型集合一起使用时性能会好得多。
引用类型的好处不多,但 IEquatable<T>
实现确实让你避免来自 System.Object
的转换如果经常调用它会有所作为。
如 Jared Parson's blog 所述不过,您必须仍然执行标准Object.Equals
和 Object.GetHashcode
覆盖。
关于c# - IEquatable 和仅覆盖 Object.Equals() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2734914/