字典的自定义迭代器?

时间:2010-04-21 14:27:25

标签: c# dictionary iterator

在我的C#-Application中,我有一个Dictionary对象。当使用foreach迭代对象时,我自然会得到字典的每个元素。但我想只迭代某些元素,具体取决于MyValue属性的值。

class MyValue
{
  public bool AmIIncludedInTheIteration { get; set; }
  ...
}

每当AmIIncludedInTheIteration为false时,foreach不会返回该项目。我知道我需要实现自己的迭代器并在某处覆盖Dictionary-Iterator。谁能在这里给我一个简短的HowTo?

提前致谢, 弗兰克

4 个答案:

答案 0 :(得分:3)

在C#3及更高版本中,您可以使用(LINQ)扩展方法:

var myFilteredCollection = myCollection.Where( x => x.AmIIncludedInTheIteration );

foreach (var x in myFilteredCollection ) ...

答案 1 :(得分:0)

您必须实现自己的IEnumerator,然后才能控制MoveNext函数中返回的内容。

谷歌搜索http://www.google.com/search?source=ig&hl=en&rlz=&=&q=dotnet+custom+IEnumerator&aq=f&aqi=&aql=&oq=&gs_rfai=

这应该给你一些可以从中开始的页面。

答案 2 :(得分:0)

我假设您要迭代字典中的值,您可以使用linq方法:

foreach(MyValue value in MyDictionary.Values.Where(i=>i.AmIIncludedInTheIteration ))
{

}

答案 3 :(得分:0)

或者在迭代字典时过滤它:

foreach (KeyValuePair<X, MyValue> element in dict.Where(x => x.Value.AmIIncludedInTheIteration)
{
  // ...
}

只是一个想法......