У меня возникла небольшая проблема с использованием List в качестве ключа в словаре(). Вот мой пример кода, который иллюстрирует эту проблему:Словарь с ключом списка <T>
Dictionary<List<double>, string> test = new Dictionary<List<double>, string>();
var a = new List<double>() { 1.0 };
var b = new List<double>() { 2.0 };
test.Add(a, "A");
test.Add(b, "B");
// Works because the reference is the same
Console.WriteLine(test[a]);
// KeyNotFoundException
Console.WriteLine(test[new List<double>() { 1.0 }]);
Я знаю, что ошибки, потому что словарь использует ссылку из списка, а не содержимое списка. В идеале следует использовать SequenceEquals, чтобы определить, существует ли ключ, если TKey - это List.
Любые идеи о том, как обойти это? Есть ли другая коллекция, которую я мог бы использовать? Должен ли я просто создать новый класс-оболочку, SequenceDictionary?
Итак, почему вы не можете сделать это, не создав экземпляр первым? – evasilchenko
Напишите свой собственный класс для ex 'IList' (используя' List') и переопределите 'Equals' и' GetHashCode' –
@DeviantSeev: Если я делаю 'var c = new List() {1.0};' then 'test [c] 'исключение все еще бросается, потому что while' c = {1.0} ',' c' имеет другую ссылку. –
Mark