(özel bir toleransla "epsilon" yapıcı parametresi) çift dizileri ile LINQ kullanımını kolaylaştırmak için. Örneğin:IEqualityComparer toleransla <double>; GetHashCode nasıl uygulanır? Bir yeniden kullanılabilir DoubleEqualityComparer uygulanması ediyorum
bool myDoubleFound = doubles.Contains(myDouble, new DoubleEqualityComparer(epsilon: 0.01));
GetHashCode'u uygulamanın doğru yolu nedir?
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: Hep aynı değeri döndürebilir:; hep Eşittir çağrısı (çift, çift) yöntemi zorlamak için (değil çok (ex GetHashCode (çift obj) {0 return}) İşte kod performant,
Bunu yapmamalıyız. 'A eşittir b' ve 'b eşittir c' ancak 'eşit değil c'. – Ani