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
Листинг программы
  1.  class MyClass : IEquatable<MyClass>
  2.         {
  3.             public int X { get; set; }
  4.             public int Y { get; set; }
  5.  
  6.             public bool Equals(MyClass other)
  7.             {
  8.                 if (ReferenceEquals(null, other)) return false;
  9.                 if (ReferenceEquals(this, other)) return true;
  10.                 return X == other.X && Y == other.Y;
  11.             }
  12.  
  13.             public override bool Equals(object obj)
  14.             {
  15.                 if (ReferenceEquals(null, obj)) return false;
  16.                 if (ReferenceEquals(this, obj)) return true;
  17.                 if (obj.GetType() != this.GetType()) return false;
  18.                 return Equals((MyClass) obj);
  19.             }
  20.  
  21.             public override int GetHashCode()
  22.             {
  23.                 unchecked
  24.                 {
  25.                     return (X*397) ^ Y;
  26.                 }
  27.             }
  28.  
  29.             public static bool operator ==(MyClass left, MyClass right)
  30.             {
  31.                 return Equals(left, right);
  32.             }
  33.  
  34.             public static bool operator !=(MyClass left, MyClass right)
  35.             {
  36.                 return !Equals(left, right);
  37.             }
  38.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы