KeyedCollection - это коллекция чего? - PullRequest
2 голосов
/ 11 ноября 2011

Я хочу создать метод, который будет проходить по коллекции ключей. Я хочу убедиться, что мой метод поддерживает итерацию любой коллекции, которая расширяет KeyedCollection<string, Collection<string>>

Вот метод:

public void IterateCollection(KeyedCollection<string, Collection<string>> items)
{
    foreach (??? item in items)
    {
        Console.WriteLine("Key: " + item.Key);
        Console.WriteLine("Value: " + item.Value);
    }
}

Это не работает, очевидно, потому что я не знаю, какой тип должен заменить знаки вопроса в цикле. Я не могу просто поместить object или var, потому что мне нужно вызвать свойства Key и Value позже в теле цикла. Какой тип я ищу? Благодарю.

Ответы [ 2 ]

8 голосов
/ 11 ноября 2011

KeyedCollection<TKey, TItem> реализует ICollection<TItem>, поэтому в этом случае вы будете использовать:

foreach(Collection<string> item in items)

Это то, что var даст вам тоже. Вы не получаете пар ключ / значение в KeyedCollection - вы просто получаете значения.

Возможно ли, что KeyedCollection действительно не самый подходящий тип для использования?

2 голосов
/ 11 ноября 2011

Тип элемента будет Collection<String> по определению перечислителя KeyedCollection.Вы не можете произвольно принять решение об использовании подходящего типа, чтобы получить как Key, так и Value, если итерация не поддерживает его, чего в данном случае нет.Обратите внимание, что использование явного типа и var абсолютно идентичны.

Если вы хотите, чтобы итераторы Key и Value были доступны в итерации, вам необходимо использовать тип Dictionary<string, Collection<string>>.

...