2010-04-21 4 views
1

dans mon C# -Application, j'ai un objet Dictionary. Quand je itère sur l'objet en utilisant foreach, j'obtiens naturellement chaque élément du dictionnaire. Mais je veux seulement que certains éléments soient itérés, en fonction de la valeur d'une propriété de MyValue.Itérateur personnalisé pour le dictionnaire?

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

Chaque fois que AmIIncludedInTheIteration est faux, l'article ne doit pas être retourné par foreach. Je comprends que je dois implémenter mon propre itérateur et remplacer le Dictionary-Iterator quelque part. Quelqu'un peut-il me donner un court HowTo?

Merci à l'avance, Frank

+0

Quelle version de C# utilisez-vous? –

Répondre

3

En C# 3 et au-dessus, vous pouvez utiliser un (LINQ) Méthode d'extension:

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

foreach (var x in myFilteredCollection) ... 
0

Vous devez implémenter votre propre IEnumerator et vous pouvez contrôler ce qui est retourné dans la fonction MoveNext.

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

Cela devrait vous donné un certain nombre de pages pour commencer à partir.

+2

Publier des recherches Google n'est pas encouragé ici. Si vous avez une réponse, répondez à la question, si ce n'est pas le cas. – Oded

0

Je suppose que vous voulez itérer sur les valeurs dans votre dictionnaire, vous pouvez utiliser une méthode LINQ pour cela:

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

} 
0

Ou vous filtrez quand itérer le dictionnaire:

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

Juste une idée ...