我想创建一个迭代键控集合的方法。我想确保我的方法支持任何扩展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
属性。我在寻找什么类型的?谢谢。
答案 0 :(得分:8)
KeyedCollection<TKey, TItem>
实现了ICollection<TItem>
,所以在这种情况下你会使用:
foreach(Collection<string> item in items)
这也是var
给你的东西。您在KeyedCollection
中没有获取键/值对 - 您只需获取值。
KeyedCollection
是否真的不适合您使用?
答案 1 :(得分:2)
根据Collection<String>
的枚举数的定义,项类型将为KeyedCollection
。您不能随意决定使用适当的类型,以便在迭代不支持时同时获得Key
和Value
,在这种情况下它不会。请注意,使用显式类型和var
完全相同。
如果您希望迭代中同时提供Key
和Value
,则需要使用Dictionary<string, Collection<string>>
类型。