2010-08-06 43 views

Répondre

16

Un IEnumerable valide qui ne génère aucune valeur lorsque vous le parcourez. Pensez-y: vous pouvez stocker le générateur IEnumerable dans une variable - le code lui-même est exécuté lorsque vous parcourez les résultats. Comment pourriez-vous exécuter le code si vous aviez null? Ou comment avez-vous savoir la fonction ne cède rien sans l'exécuter.

8

Ce dernier - vous serez en mesure de GetEnumerator() quoi qu'il arrive, il n'y aura pas d'éléments à énumérer. Ceci est équivalent à Enumerable.Empty<T>.

1

En effet, 2.0 codeurs qui penchai vers une utilisation intensive des énumérations aurait un morceau standard dans leurs boîtes à outils de:

public static IEnumerable<T> EmptyEnum<T>() 
{ 
    yield break; 
} 

Avant System.Linq.Enumerable.Empty() est venu. Très utile dans beaucoup de cas, assez souvent précisément parce qu'il ne renvoie pas de null. Par exemple, si GetIntEnum() peut renvoyer une sorte de type IEnumerable mais peut aussi renvoyer une valeur nulle, alors GetIntEnum() ?? Enumerable.Empty<T>() nous donne quelque chose qui peut toujours être énuméré (en supposant que c'est le comportement désiré dans le cas de résultats Null).