2012-07-03 24 views
10

Tôi muốn loại của mình triển khai IEnumerable<string>. Tôi cố gắng để làm theo C# in a Nutshell, nhưng đã xảy ra:Cách triển khai IEnumerable <T> bằng GetEnumerator()?

public class Simulation : IEnumerable<string> 
{ 
    private IEnumerable<string> Events() 
    { 
     yield return "a"; 
     yield return "b"; 
    } 

    public IEnumerator<string> GetEnumerator() 
    { 
     return Events().GetEnumerator(); 
    } 
} 

Nhưng tôi nhận được lỗi build

Lỗi 1 'EventSimulator.Simulation' không thực hiện thành viên giao diện 'System.Collections. IEnumerable.GetEnumerator() '. 'EventSimulator.Simulation.GetEnumerator()' không thể thực hiện 'System.Collections.IEnumerable.GetEnumerator()' bởi vì nó không có kiểu trả về phù hợp của 'System.Collections.IEnumerator'.

+0

Ngoài ra: bạn có thể 'trả về lợi nhuận' trực tiếp từ bên trong 'GetEnumerator()' – AlexFoxGill

Trả lời

25

Bạn đang thiếu IEnumerator IEnumerable.GetEnumerator():

public class Simulation : IEnumerable<string> 
{ 
    private IEnumerable<string> Events() 
    { 
     yield return "a"; 
     yield return "b"; 
    } 

    public IEnumerator<string> GetEnumerator() 
    { 
     return Events().GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
+2

Cảm ơn việc này đã hiệu quả. –

+0

Đã có câu hỏi, nhưng @NominSim đã trả lời câu hỏi đó trong bài đăng dưới đây - không bao giờ! –

+0

cảm ơn, bây giờ tôi có thể thêm điều này vào tập tin EF TT của tôi ;-) –

4

IEnumerable đòi hỏi bạn phải thực hiện cả hai đánh máy và phương pháp chung.

Trong phần cộng đồng của msdn docs giải thích lý do bạn cần cả hai. (Đối với khả năng tương thích ngược là lý do được đưa ra về cơ bản).

Các vấn đề liên quan