2010-08-22 41 views
7

我真的很喜欢,能够做到这一点在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

System.Collections命名空间中的集合有点过时。除非您有充分理由使用旧的非泛型集合,否则请使用System.Collections.Generic命名空间中的泛型集合。 C#/ .NET中的所有花哨的东西,例如LINQ,都是围绕通用的IEnumerable 接口构建的。 – dtb 2010-08-22 16:00:21

+0

我看到...我只是缺少System.Collections.Generic的使用说明。这就是为什么它不起作用。 – asmo 2010-08-22 16:07:05

+0

-1不包括MexicanHeatwavePizza,但是+2表示一个不错的问题;) – Andy 2010-08-22 16:11:10

回答

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(); 
}