2010-08-06 17 views
12

El método devuelve IEnumerable a través de una declaración de rendimiento devuelto.Si el rendimiento nunca se produce, ¿se devuelve nulo?

Si el enunciado de rendimiento nunca ocurre (está dentro de la lógica condicional), ¿el método devolverá nulo, o devolverá un Enumerable con un conteo de 0?

Respuesta

16

Un IEnumerable válido que no produce ningún valor cuando lo recorre.

Solo piénselo: puede almacenar el generador de IEnumerable en una variable: el código en sí mismo se ejecuta cuando realmente se repiten los resultados. ¿Cómo podría ejecutar el código si tuviera null? O cómo sabe la función no cede nada sin ejecutarlo.

8

Lo último - usted podrá GetEnumerator() pase lo que pase, simplemente no habrá ningún elemento para enumerar. Esto es equivalente a Enumerable.Empty<T>.

1

De hecho, 2.0 codificadores que se apoyaban hacia un uso intensivo de las enumeraciones tendrían una pieza estándar en sus kits de herramientas de:

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

Antes System.Linq.Enumerable.Empty() llegó. Muy útil en muchos casos, muy a menudo precisamente porque no devuelve nulo. Por ejemplo, si GetIntEnum() puede devolver algún tipo de tipo IEnumerable pero también puede devolver nulo, entonces GetIntEnum() ?? Enumerable.Empty<T>() nos da algo que siempre es seguro enumerar (suponiendo que ese es el comportamiento deseado en el caso de resultados nulos).

Cuestiones relacionadas