我真的很高兴能够在C#中做到这一点:
IEnumerable GetThePizzas()
{
yield return new NewYorkStylePizza();
yield return new SicilianPizza();
yield return new GreekPizza();
yield return new ChicagoStylePizza();
yield return new HawaiianPizza();
}
而在Java中,我会这样做:
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;
}
请注意,Java代码会告知返回的内容类型(Pizza实例)。 C#代码没有。这让我很烦恼,尤其是在其他程序员无法访问源代码的情况下。有办法解决这个问题吗?
更新:我的问题是我使用了“System.Collections”而不是“System.Collections.Generic”,因此我使用的是非通用版本的IEnumerable。
答案 0 :(得分:15)
使用IEnumerable的通用版本IEnumerable<T>,您可以轻松地执行此操作:
IEnumerable<Pizza> GetThePizzas()
{
yield return new NewYorkStylePizza();
yield return new SicilianPizza();
yield return new GreekPizza();
yield return new ChicagoStylePizza();
yield return new HawaiianPizza();
}