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