2010-08-22 2 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

+0

Я вижу ... Я просто не использовал инструкцию для System.Collections.Generic. Вот почему он не работал. – asmo

+0

-1 для не включая MexicanHeatwavePizza, но +2 для хорошего вопроса;) – Andy

ответ

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(); 
} 
Смежные вопросы