我非常喜欢在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。
yield
生成的披萨会在需要时创建,就像最终的集合在循环遍历时一样。 - Dario