2009-03-07 10 views
0

Je possède ce code:mise en œuvre itérateurs vide

public IEnumerable<int> Iterator { 
     get { if (false) yield return -1; } 
    } 

Il est assez laid, mais quand vous essayez de factoriser à:

public IEnumerable<int> Iterator { 
     get { return null; } 
    } 

Les pauses code suivant:

foreach (var item in obj.Iterator) { 
} 

Comment allez-vous nettoyer cela?

Répondre

6

Le framework .NET a déjà une méthode exactement cela, par la voie (rendant la redondance de code de Jared): System.Enumerable.Empty<T>.

+0

yerp c'est mon préféré de loin –

+0

Mais ... son seul disponible avec .Net 3.5 –

10
public IEnumerable<int> Iterator { 
    get { yield break; } 
} 
+0

mon nouveau favori – Will

2

Une meilleure solution serait de définir une méthode réutilisable pour ce problème. Je garde une méthode dans ma bibliothèque partagée pour m'occuper de ce cas.

public static class CollectionUtility { 
    public static IEnumerable<T> CreateEmptyEnumerable<T>() { 
    yield break; 
    } 
} 

Maintenant, dans votre méthode vous pouvez simplement appeler

public static IEnumerable<int> Iterator { 
    get { return CollectionUtility.CreateEmptyEnumerable<int>(); } 
} 
+0

impressionnant. Beaucoup mieux que «rupture de rendement». Oui, je suis sarcastique. – Will

0
public IEnumerable<int> Iterator { 
     get { yield break; } 
    }