Строго типизированный интерфейс метода с использованием yield return

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

7
задан asmo 22 August 2010 в 16:10
поделиться

1 ответ

Используя общую версию 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();
}
15
ответ дан 6 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: