2011-11-11 103 views
2

我想创建一个方法,可以遍历一个键控集合。我想,以确保任何收集我的方法支持迭代,它扩展了KeyedCollection<string, Collection<string>>KeyedCollection是什么的集合?

这里的方法:

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

它没有明显的工作,因为我不知道哪种类型应更换问题在循环中标记。我不能简单地把objectvar,因为我需要在循环体中稍后调用KeyValue属性。我在找什么类型的产品?谢谢。

+1

您应该考虑在您的帮助中使用ReSharper或任何其他代码辅助工具。当你使用var时,ReSharper会给你一个明确指定类型的选项。所以你可以通过ReSharper(alt-enter) – edvaldig

+0

中的一个简单的组合键来解决这个问题。如果你打电话给救援人员? 在你的情况下,项目将收集这是什么KeyedCollection将返回,KeyedCollection会始终返回,检查了这一点:http://msdn.microsoft.com/en-us/library/ms132438.aspx – VoidMain

+0

@edvaldig谢谢为真棒提示! – Boris

回答

8

KeyedCollection<TKey, TItem>实现ICollection<TItem>,所以在这种情况下,你会使用:

foreach(Collection<string> item in items) 

这就是var会给你。您不要KeyedCollection中获得键/值对 - 您只需获取值。

有没有可能KeyedCollection真的不是您最适合使用的类型?

+0

感谢Jon。我确实需要键/值对的集合,所以我使用'KeyedCollection'是错误的。你能不能给我推荐一个尽可能抽象的类,但可以达到我的目的?谢谢。 – Boris

+1

@Boris:只是'IDictionary '是我的建议。 –

2

根据KeyedCollection的统计员的定义,物品类型将为Collection<String>。您不能任意决定使用适当的类型,以便在迭代不支持的情况下同时获得KeyValue,在这种情况下它不适用。请注意,使用显式类型和var完全相同。

如果要同时提供KeyValue迭代,则需要使用Dictionary<string, Collection<string>>类型。

+0

mellamokb,感谢您澄清明确的类型和变量。你能推荐一个可以达到我的目的的课程吗?我需要一组键/值对。谢谢! – Boris

相关问题