Dictionary(TKey, TValue).ContainsKey сравнение по значению - C#
Формулировка задачи:
есть некоторые полиморфные объекты от одного базового класса Item, потому использую именно класс, а не структуру.
Далее необходимо использовать словарь Dictynary<Item, int> который заполняется автоматически, при этом ключом могут быть объекты различного типа, наследники Item. Необходимо чтоб метод ContainsKey находил ключ, если ЗНАЧЕНИЕ его поля, указанное в базовом классе Item совпадает со значением поля "нового" ключа.
Переопределил уже все что только можно:
Equals(object), Equals(Item), интерфейсы IComparable<Person>, IComparer<Person>, IComparable, но все равно метод выполняет сравнение по ссылке а не по значению.
структуру использовать не могу так как ключ - полиморфный объект.
что же использует метод ContainsKey для сравнения ключей???
Решение задачи: «Dictionary(TKey, TValue).ContainsKey сравнение по значению»
textual
Листинг программы
class MyClass : IEquatable<MyClass>
{
public int X { get; set; }
public int Y { get; set; }
public bool Equals(MyClass other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return X == other.X && Y == other.Y;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((MyClass) obj);
}
public override int GetHashCode()
{
unchecked
{
return (X*397) ^ Y;
}
}
public static bool operator ==(MyClass left, MyClass right)
{
return Equals(left, right);
}
public static bool operator !=(MyClass left, MyClass right)
{
return !Equals(left, right);
}
}