我想创建一个方法,通过键控集合进行迭代。我想确保我的方法支持任何扩展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
属性。我要找的是什么类型的?谢谢
KeyedCollection<TKey, TItem>
实现ICollection<TItem>
,因此在这种情况下,您将使用:
foreach(Collection<string> item in items)
这也是var
会给你的。在KeyedCollection
中,您不会得到键/值对,您只得到值。
KeyedCollection
是否真的不是最适合您使用的类型?
根据KeyedCollection
的枚举器的定义,项类型将为Collection<String>
。如果迭代不支持Key
和Value
,则不能任意决定使用适当的类型,而在本例中则不支持。请注意,使用显式类型和var
完全相同。
如果希望Key
和Value
在迭代中都可用,则需要使用Dictionary<string, Collection<string>>
类型。