Строго типизированный интерфейс метода с использованием yield return - PullRequest
7 голосов
/ 22 августа 2010

Мне действительно приятно иметь возможность делать это в 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 Ответ

15 голосов
/ 22 августа 2010

Используя общую версию IEnumerable, IEnumerable , вы можете так же легко сделать это:

IEnumerable<Pizza> GetThePizzas()
{
    yield return new NewYorkStylePizza();
    yield return new SicilianPizza();
    yield return new GreekPizza();
    yield return new ChicagoStylePizza();
    yield return new HawaiianPizza();
}
...