2009-10-17 27 views
9

ja ręcznie konwersji Java do C# i mieć następujący kod:co to jest C# równoważne z Iterator w Javie

for (Iterator<SGroup> theSGroupIterator = SGroup.getSGroupIterator(); 
    theSGroupIterator.hasNext();) 
{ 
    SGroup nextSGroup = theSGroupIterator.next(); 
} 

Czy istnieje odpowiednik Iterator<T> w C# czy istnieje lepszy C# idiom?

Odpowiedz

16

bezpośredniego odpowiednika w języku C# byłoby IEnumerator<T> kod wyglądałby tak:

SGroup nextSGroup; 
using(IEnumerator<SGroup> enumerator = SGroup.GetSGroupEnumerator()) 
{ 
    while(enumerator.MoveNext()) 
    { 
     nextSGroup = enumerator.Current; 
    } 
} 

Jednak idiomatyczny sposób byłby następujący:

foreach(SGroup group in SGroup.GetSGroupIterator()) 
{ 
    ... 
} 

i mają GetSGroupIterator zwrócić IEnumerable<T> (i prawdopodobnie nazwy do GetSGroups() lub podobny).

3

Ogólnie w .NET będziesz używać interfejsu IEnumerable<T>. Spowoduje to zwrócenie wartości IEnumerator<T>, którą można nazwać metodą MoveNext i właściwością Current w celu wykonywania iteracji w sekwencji.

W języku C# słowo kluczowe foreach robi to wszystko za Ciebie. Przykłady jak korzystać foreach można znaleźć tutaj:

http://msdn.microsoft.com/en-us/library/ttw7t8t6(VS.80).aspx