Есть ли словарь <Key, Value> без уникального ключа?

Возможный дубликат:
Дублировать ключи в словарях .NET?

Мне нужно создать Collection<string,object>, одна строка, а другая - объект. Я не могу использовать словарь, потому что ни один из элементов не является уникальным.

Есть ли способ создать List<T,T>? Поскольку я не хочу создавать объект для хранения обоих значений, просто чтобы использовать его в одном цикле foreach.

Спасибо

Ответы

Ответ 1

Попробуйте List<Tuple<string, object>>. Затем вы можете получить обычную поддержку linq над списком, чтобы получить в каждом Tuple<string, object>.

Tuple<,> class доступен начиная с .NET 4, но вы можете легко имитировать собственный тип кортежа без много хлопот.

Я думаю, что кортежи считаются равными на основе их значений элементов, но с object это, скорее всего, будет ссылкой равным и, следовательно, не должно быть равным... если это имеет смысл!

Подробнее о равенстве здесь:

Удивительное равенство в кортеже (в)

Update:

Если вам нужно связать список элементов с ключом для целей поиска, ответ на дублированный вопрос правильно отобразит Lookup (в вашем случае Lookup<string, object>), который выражает ваше намерение немного яснее, чем List<Tuple<string, object>>.

Ответ 2

Попробуйте создать свой собственный класс и использовать его

    class KeyValue<Tkey,TValue>
    {
       public Tkey Key {get;set;}
       public TValue Value {get;set;}
    }

используйте как

List<KeyValue<string,string>> list = new List<KeyValue<string,string>>();

Ответ 3

вы можете использовать

List<KeyValuePair<string,object>>

или

Dictionary<string,List<object>>

Ответ 4

Возможно, вы могли бы создать список кортежей, используя класс Tuple? Что-то вроде этого:

List<Tuple<String, Object>> list = new List<Tuple<String, Object>>();

Ответ 6

Считаете ли вы использование "Группировать по", а затем сгруппированный результат в словарь?