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);
            }
        }

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


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

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

9   голосов , оценка 3.667 из 5
Похожие ответы