2010-08-22 44 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(); 
}