Есть ли простой способ сделать хэш-ключ для класса на основе его данных ??? Или какой-то интерфейс для этого?Как сделать объекты с одинаковыми данными одинаковыми?
У меня есть Dictionary<MyClass, int>
.
MyClass очень прост, она содержит имя и массив строк:
class MyClass
{
public string Name {get; private set;}
public string[] Attributes {get; private set; }
//and a constructor and some methods
}
Теперь, если у меня есть два MyClass
экземпляров, содержащих одни и те же имена и атрибуты, мне нужно, что словарь считать, если они имеют одинаковые ключ.
Я попытался сделать его структурой и попытался сделать также Dictionary<string[], int>
, но все три случая равны, dicionary видит разные ключи для каждого экземпляра, даже если с одинаковыми данными.
Я мог бы создать строковый ключ с алгоритмом, принимающим имя и все параметры, и создать Dictionary<string, int>
, но я бы хотел что-то более автоматическое. Есть ли другой путь? Может быть, интерфейс (который не избегал бы алгоритма, но лучше, чем ничего).
Возможный дубликат [Когда мы делаем GetHashCode() для Словаря?] (Http://stackoverflow.com/questions/1407380/when-do-we-do-gethashcode-for-a-dictionary) (Также релевантно: [Почему важно переопределить GetHashCode, когда метод Equals переопределен?] (http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method- is-overridden)) –
Ведется ли порядок строк в атрибутах «Атрибуты»? Случай? Является ли элемент 'null'' Attributes' равным ненулевой, но пустой? Наличие двух из этих классов «равным» не является очевидным или простым. – dlev
Все имеет значение, но нулевые атрибуты невозможны. (Пустой разрешен) –