2009-10-17 23 views
9

Estoy convirtiendo manualmente Java a C# y tienen el siguiente código:lo que es el equivalente C# de iterador en Java

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

¿Hay un equivalente de Iterator<T> en C# o hay una mejor C# lenguaje?

Respuesta

16

El equivalente directo en C# sería IEnumerator<T> y el código sería algo como esto:

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

Sin embargo, la manera idiomática sería:

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

y tiene un retorno GetSGroupIteratorIEnumerable<T> (y probablemente cambie su nombre por GetSGroups() o similar).

3

En .NET en general, vas a utilizar la interfaz IEnumerable<T>. Esto devolverá un IEnumerator<T> al que puede llamar el método MoveNext y la propiedad Current para iterar a través de la secuencia.

En C#, la palabra clave foreach hace todo esto por ti. Ejemplos de cómo utilizar foreach se pueden encontrar aquí:

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

Cuestiones relacionadas