Я уже задавал вопрос об этом классе раньше, но вот еще один.
Я ' Мы создали сложный класс:
public class Complex
{
public double Real { get; set; }
public double Imaginary { get; set; }
}
И я реализую функции Equals
и Hashcode
], а функция Equal учитывает определенную точность. Я использую для этого следующую логику:
public override bool Equals(object obj)
{
//Some default null checkint etc here, the next code is all that matters.
return Math.Abs(complex.Imaginary - Imaginary) <= 0.00001 &&
Math.Abs(complex.Real - Real) <= 0.00001;
}
Ну, это работает, когда Воображаемая и Реальная части действительно близки друг к другу, это говорит о том, что они одинаковы.
Теперь я пытался реализовать функцию HashCode, я использовал несколько примеров, которые использовал здесь Джон Скит, в настоящее время у меня есть следующие:
public override int GetHashCode()
{
var hash = 17;
hash = hash*23 + Real.GetHashCode();
hash = hash*23 + Imaginary.GetHashCode();
return hash;
}
Однако это не принимает во внимание определенную точность, которую я хочу использовать. Итак, в основном следующие два класса:
Complex1 [Real = 1.123456; Мнимый = 1,123456]
Комплекс2 [Действительный = 1,123457; Imaginary = 1.123457]
Равны
, но не предоставляют одинаковый HashCode
, как я могу этого добиться?