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?

È stato utile?

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
scroll top