使用yield return的强类型方法接口

时间:2010-08-22 15:53:37

标签: c# ienumerable

我真的很高兴能够在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。

1 个答案:

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