Outre (IEnumerable retour GetEnumerator(), pour "foreach" IEnumerble est essentiel)C# Itreator meilleure approche
presque les deux approches suivantes nous permettent de parcourir la collection.What est
l'avantage de l'un sur l'autre? (Je ne demande pas la différence entre IEnumerable et IEnumerator).
static void Main()
{
IEnumerator<int> em = MyEnumerator<int>(new int[] { 1, 2, 3, 4 });
IEnumerator<int> e = Collection<int>
(new int[] { 1, 2, 3, 4 }).GetEnumerator();
while (em.MoveNext())
{
Console.WriteLine(em.Current);
}
while (e.MoveNext())
{
Console.WriteLine(e.Current);
}
Console.ReadKey(true);
}
approche 1
public static IEnumerator<T> MyEnumerator<T>(T[] vals)
{
T[] some = vals;
foreach (var v in some)
{
yield return v;
}
}
approche 2
public static IEnumerable<T> Collection<T>(T[] vals)
{
T[] some = vals;
foreach (var v in some)
{
yield return v;
}
}
Explications de super duper Merci – udana
NE JAMAIS appeler Réinitialiser. La réinitialisation était une mauvaise idée et n'est presque jamais implémentée. Si vous devez redémarrer une énumération, créez simplement un nouvel énumérateur. –
Ok, donc c'est un gros point contre le fait de contourner les instances d'IEnumerator, sans réinitialiser, elles ne sont absolument pas viables. –