2010-08-22 36 views
7

Tôi thực sự thích để có thể làm điều này trong C#:Strongly-typed giao diện phương pháp sử dụng yield return

IEnumerable GetThePizzas() 
{ 
    yield return new NewYorkStylePizza(); 
    yield return new SicilianPizza(); 
    yield return new GreekPizza(); 
    yield return new ChicagoStylePizza(); 
    yield return new HawaiianPizza(); 
} 

Trong khi trong Java Tôi đã thực hiện nó như thế:

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; 
} 

ý rằng mã Java cho biết kiểu của những gì được trả về (các cá thể Pizza). Mã C# không. Nó gây lỗi cho tôi, đặc biệt là trong các tình huống mà những người lập trình khác không có quyền truy cập vào mã nguồn. Có cách nào để sửa lỗi này?

Cập nhật: Vấn đề của tôi là tôi đã sử dụng "System.Collections" thay vì "System.Collections.Generic" và do đó tôi đang sử dụng phiên bản không phải là chung của IEnumerable.

+0

Các bộ sưu tập trong không gian tên System.Collections được phần nào phản đối. Sử dụng các bộ sưu tập chung từ không gian tên System.Collections.Generic trừ khi bạn có lý do chính đáng để sử dụng các bộ sưu tập cũ, không chung chung. Tất cả các công cụ ưa thích trong C# /. NET như LINQ được xây dựng xung quanh giao diện chung của IEnumerable . – dtb

+0

Tôi hiểu ... Tôi chỉ đơn giản là thiếu hướng dẫn sử dụng cho System.Collections.Generic. Đó là lý do tại sao nó không hoạt động. – asmo

+0

-1 vì không bao gồm MexicanHeatwavePizza, nhưng +2 cho một câu hỏi hay;) – Andy

Trả lời

15

Sử dụng phiên bản generic của IEnumerable, IEnumerable<T>, bạn có thể cũng giống như dễ dàng làm được điều này:

IEnumerable<Pizza> GetThePizzas() 
{ 
    yield return new NewYorkStylePizza(); 
    yield return new SicilianPizza(); 
    yield return new GreekPizza(); 
    yield return new ChicagoStylePizza(); 
    yield return new HawaiianPizza(); 
} 
Các vấn đề liên quan