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.
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
Vedo ... Mi mancava semplicemente l'istruzione using per System.Collections.Generic. Ecco perché non funzionava. – asmo
-1 per non includere un MexicanHeatwavePizza, ma +2 per una bella domanda;) – Andy