Словарь с целочисленным массивом в качестве ключа - PullRequest
1 голос
/ 01 августа 2010

Мне нужен словарь, ключом которого является массив целых чисел, например Dictionary<int[],string> или

Dictionary<List<int>,string>.

Но я очень удивлен, что метод Equality и метод хеш-кода не определены для меня. Есть ли простой способ реализовать такую ​​структуру, кроме создания моей собственной MyType: List<int> и определения всех необходимых методов?

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

Это не предопределено, потому что это дорого . Если вы знаете, что ваш список короток, просто используйте очевидные переопределения. Если нет, вам придется придумать какую-то эвристику хотя бы для GetHashCode. Скажем, GetHashCode только первой пары элементов, xor-ed вместе с Length.

1 голос
/ 02 августа 2010

GetHashCode и Equality определены для List, они просто не переопределяются, чтобы дать вам поведение, которое вы могли бы ожидать и вместо этого.

Если вы используете .NET 3.5, вы можете написать методы расширения для Listкоторый реализует переопределение как для GetHashCode(), так и для Equality()

0 голосов
/ 02 августа 2010

Вместо создания собственного типа вы можете указать где-нибудь два метода

string ConvertListToString(List<int> l){...};
List<int> ConvertStringToList(string s){...};

и использовать вместо него Dictionary<string,string>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...