我执行一个可重复使用的DoubleEqualityComparer(使用自定义公差:在“小量”的构造函数参数),以缓解LINQ的使用与双序列。 例如:
bool myDoubleFound = doubles.Contains(myDouble, new DoubleEqualityComparer(epsilon: 0.01));
什么是执行的GetHashCode正确的方式? 下面的代码:
public class DoubleEqualityComparer : IEqualityComparer<double>, IEqualityComparer<double?>
{
private readonly double epsilon;
public DoubleEqualityComparer(double epsilon)
{
if (epsilon < 0)
{
throw new ArgumentException("epsilon can't be negative", "epsilon");
}
this.epsilon = epsilon;
}
public bool Equals(double x, double y)
{
return System.Math.Abs(x - y) < this.epsilon;
}
public int GetHashCode(double obj)
{
// ?
}
}
PS:我可以随时返回相同的值(例如:GetHashCode的(双OBJ){返回0;})总是强制调用的equals(双,双)方法(不是很高性能的,我知道),但我记得这解决造成问题时,比较器与字典使用...