2010-08-22 9 views
7

Mi piace molto essere in grado di fare questo in C#:fortemente tipizzato interfaccia metodo di ritorno dalla resa

IEnumerable GetThePizzas() 
{ 
    yield return new NewYorkStylePizza(); 
    yield return new SicilianPizza(); 
    yield return new GreekPizza(); 
    yield return new ChicagoStylePizza(); 
    yield return new HawaiianPizza(); 
} 

Mentre in Java avrei fatto in quel modo:

Collection<Pizza> getThePizzas() 
{ 
    ArrayList<Pizza> pizzas = new ArrayList<Pizza>(); 

    pizzas.add(new NewYorkStylePizza()); 
    pizzas.add(new SicilianPizza()); 
    pizzas.add(new GreekPizza()); 
    pizzas.add(new ChicagoStylePizza()); 
    pizzas.add(new HawaiianPizza()); 

    return pizzas; 
} 

Si noti che il codice Java indica il tipo di ciò che viene restituito (istanze Pizza). Il codice C# no. Mi infastidisce, specialmente in situazioni in cui altri programmatori non hanno accesso al codice sorgente. C'è un modo per risolvere questo problema?

Aggiornamento: Il mio problema era che ho usato "System.Collections" invece di "System.Collections.Generic" e quindi stavo usando la versione non generica di IEnumerable.

+0

Le collezioni nello spazio dei nomi System.Collections sono un po 'obsolete. Utilizzare le raccolte generiche dallo spazio dei nomi System.Collections.Generic a meno che non si abbia una buona ragione per utilizzare le raccolte vecchie e non generiche. Tutto il materiale di fantasia in C# /. NET come LINQ è costruito attorno all'interfaccia generica IEnumerable . – dtb

+0

Vedo ... Mi mancava semplicemente l'istruzione using per System.Collections.Generic. Ecco perché non funzionava. – asmo

+0

-1 per non includere un MexicanHeatwavePizza, ma +2 per una bella domanda;) – Andy

risposta

15

Utilizzando la versione generica di IEnumerable, IEnumerable<T>, si può altrettanto facilmente fare questo:

IEnumerable<Pizza> GetThePizzas() 
{ 
    yield return new NewYorkStylePizza(); 
    yield return new SicilianPizza(); 
    yield return new GreekPizza(); 
    yield return new ChicagoStylePizza(); 
    yield return new HawaiianPizza(); 
} 
Problemi correlati