J'apprécie vraiment être en mesure de le faire en C#:interface méthode fortement typé en utilisant le retour de rendement
IEnumerable GetThePizzas()
{
yield return new NewYorkStylePizza();
yield return new SicilianPizza();
yield return new GreekPizza();
yield return new ChicagoStylePizza();
yield return new HawaiianPizza();
}
Alors qu'en Java je l'aurais fait comme ça:
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;
}
Notez que le code Java indique le type de ce qui est renvoyé (instances de pizza). Le code C# ne le fait pas. Cela me dérange, surtout dans les situations où d'autres programmeurs n'ont pas accès au code source. Y'a t'il un moyen d'arranger cela?
Mise à jour: Mon problème était que j'ai utilisé "System.Collections" au lieu de "System.Collections.Generic" et donc j'utilisais la version non générique de IEnumerable.
Les collections dans l'espace de noms System.Collections sont un peu dépréciées. Utilisez les collections génériques de l'espace de noms System.Collections.Generic sauf si vous avez une bonne raison d'utiliser les anciennes collections non génériques. Tous les trucs de C#/.NET tels que LINQ sont construits autour de l'interface générique IEnumerable. –
dtb
Je vois ... Il me manquait simplement l'instruction using pour System.Collections.Generic. Voilà pourquoi ça ne fonctionnait pas. – asmo
-1 pour ne pas inclure un MexicanHeatwavePizza, mais +2 pour une bonne question;) – Andy