我希望我的Food
类能够在与另一个Food
实例相等时进行测试.稍后我将对一个列表使用它,我想使用它的List.Contains()
方法.我应该执行IEquatable<Food>
还是只覆盖Object.Equals()
?来自MSDN:
此方法通过以下方式确定等式:
所以我的下一个问题是:函数的哪些函数/类.NET框架使用Object.Equals()
?我应该首先使用它吗?
我希望我的Food
类能够在与另一个Food
实例相等时进行测试.稍后我将对一个列表使用它,我想使用它的List.Contains()
方法.我应该执行IEquatable<Food>
还是只覆盖Object.Equals()
?来自MSDN:
此方法通过以下方式确定等式:
所以我的下一个问题是:函数的哪些函数/类.NET框架使用Object.Equals()
?我应该首先使用它吗?
主要原因是性能.当仿制药被引入美国时.NET2.0他们能够添加一系列整洁的类,比如List<T>
、Dictionary<K,V>
、HashSet<T>
等.这些 struct 大量使用GetHashCode
和Equals
.但对于值类型,这需要装箱.IEquatable<T>
允许 struct 实现强类型Equals
方法,因此不需要装箱.因此,在将值类型与泛型集合一起使用时,性能会更好.
引用类型受益不大,但IEquatable<T>
实现确实让您避免了System.Object
的强制转换,如果它被频繁调用,这可能会有所不同.
但是,正如Jared Parson's blog所指出的,您must仍然实现标准Object.Equals
和Object.GetHashcode
覆盖.