Implementazione di iteratori vuoti
-
05-07-2019 - |
Domanda
Ho questo codice:
public IEnumerable<int> Iterator {
get { if (false) yield return -1; }
}
È abbastanza brutto, ma quando provi a rifattarlo in:
public IEnumerable<int> Iterator {
get { return null; }
}
Il seguente codice si interrompe:
foreach (var item in obj.Iterator) {
}
Come faresti a ripulirlo?
Soluzione
Il framework .NET ha già un metodo per fare esattamente questo, tra l'altro (rendendo ridondante il codice di Jared): System.Enumerable.Empty<T>
.
Altri suggerimenti
public IEnumerable<int> Iterator {
get { yield break; }
}
Una soluzione migliore sarebbe quella di definire un metodo riutilizzabile per questo problema. Tengo un metodo nella mia libreria condivisa per occuparmi solo di questo caso.
public static class CollectionUtility {
public static IEnumerable<T> CreateEmptyEnumerable<T>() {
yield break;
}
}
Ora nel tuo metodo potresti semplicemente chiamare
public static IEnumerable<int> Iterator {
get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
public IEnumerable<int> Iterator {
get { yield break; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow