Pregunta

Tengo este código:

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

Es bastante feo, pero cuando intentas refactorizarlo para:

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

El siguiente código se rompe:

foreach (var item in obj.Iterator) {
}

¿Cómo harías para limpiar esto?

¿Fue útil?

Solución

.NET Framework ya tiene un método para hacer exactamente esto, por cierto (haciendo que el código de Jared sea redundante): System.Enumerable.Empty<T> .

Otros consejos

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

Una mejor solución sería definir un método reutilizable para este problema. Mantengo un método en mi biblioteca compartida para ocuparme solo de este caso.

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

Ahora, en su método, simplemente podría llamar

public static IEnumerable<int> Iterator { 
  get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
  public IEnumerable<int> Iterator {
        get { yield break; }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top