Пользовательский итератор для словаря? - PullRequest
1 голос
/ 21 апреля 2010

в моем C # -приложении у меня есть объект Dictionary. Перебирая объект с помощью foreach, я естественно получаю каждый элемент словаря. Но я хочу, чтобы повторялись только определенные элементы, в зависимости от значения свойства MyValue.

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

Всякий раз, когда AmIIncludedInTheItification имеет значение false, элемент не должен быть возвращен foreach. Я понимаю, что мне нужно реализовать свой собственный итератор и где-то переопределить словарь-итератор. Может кто-нибудь здесь дать мне краткое HowTo?

Спасибо заранее, Frank

Ответы [ 4 ]

3 голосов
/ 21 апреля 2010

В C # 3 и выше вы можете использовать метод расширения (LINQ):

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

foreach (var x in myFilteredCollection ) ...
0 голосов
/ 21 апреля 2010

Или вы фильтруете его при повторении словаря:

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

Просто идея ...

0 голосов
/ 21 апреля 2010

Я предполагаю, что вы хотите перебрать значения в вашем словаре, вы можете использовать метод linq для этого:

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

}
0 голосов
/ 21 апреля 2010

Вы должны реализовать свой собственный IEnumerator, а затем вы можете контролировать то, что возвращается в функции MoveNext.

Поиск в Google http://www.google.com/search?source=ig&hl=en&rlz=&=&q=dotnet+custom+IEnumerator&aq=f&aqi=&aql=&oq=&gs_rfai=

Это должно дать вам несколько страниц, с которых нужно начинать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...