在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?
我在我的类上重载了==运算符,如下所示:
public static bool operator ==(Table pt1, Table pt2) {
return Compare(pt1, pt2) == 0 && pt1.TableName == pt2.TableName;
}
Run Code Online (Sandbox Code Playgroud)
比较将像strcmp在c ++中一样工作,返回一个整数.问题是,如果我执行if(MY_CLASS == null),它将调用我的==运算符,从而调用我的Compare函数.什么是alternatiev?检查pt1和pt2以查看它们是否为空?或者只是在pt2?
当我必须实现相等比较器
public class SampleClass
{
public int Prop { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我应该做
null == new SampleClass()
Run Code Online (Sandbox Code Playgroud)
和
new SampleClass() == null
Run Code Online (Sandbox Code Playgroud)
和
new SampleClass().Equals(null)
Run Code Online (Sandbox Code Playgroud)
假?
那怎么样?
new SampleClass() != null
Run Code Online (Sandbox Code Playgroud)
它应该也是假的吗?
更新人们质疑这个问题背后的原因.它应该是!=和==永远是对立的.但是如果我实现这些方法所以所有这些比较都会导致错误,那么将会出现==和!=运算符会产生相同结果的情况.因此,是否应该返回true或false是一个两难的选择.
c# ×3
.net ×2
algorithm ×1
gethashcode ×1
hashcode ×1
iequatable ×1
immutability ×1
null ×1
operators ×1
types ×1