Я думаю, что это может быть общий вопрос, но я не смог найти ни одного поста об этом.
Я пишу псевдокод ниже. Если вы хотите скомпилировать код, просто проигнорируйте этот пост.
Так сказать, два класса: один базовый класс и один дочерний класс. ПРИМЕЧАНИЕ. Оба класса имеют функции переопределения Equals () и GetHashCode () для обеспечения равенства с одним и тем же свойством.
public class A // A has a string property of name
public class B:A // B has a string property of title
var a = new A{name = "bob"};
var b = new B{name = "bob", title = "em"};
В некоторых кодах есть словарь, основанный на A
var dict = new Dictionary<A>();
Делая какие-то добавления, например,
dict.Add(a);
Однако функция поиска вызовет KeyNotFoundException, если я использую поиск производного класса с приведением типа / o
dict[b];
Словарь вычислит хэш-код B вместо A и выдает исключение в соответствии с этим.
Простое и неудобное решение - создать новый экземпляр A на основе свойства B.
dict[new A{name = b.name}];
Интересно, есть ли лучшее решение?