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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д