2010-01-12 30 views
21

Tôi có phương thức trả về một số IEnumerable<T> và tôi đang cố gỡ lỗi mã bên trong phương thức đó.Gỡ lỗi phương thức IEnumerable

Mỗi lần tôi bước qua mã trong Visual Studio trong quá trình gỡ lỗi, nó bước qua phương pháp được đề cập.

Khi tôi đặt điểm ngắt bên trong phương pháp, nó sẽ không bao giờ bị trúng. Mã chắc chắn chạy như tôi đã thử nghiệm bởi yield return 'ing T giả từ phương pháp.

Không thể gỡ lỗi các phương pháp IEnumerable theo cách này hoặc tôi có làm điều gì khác sai không?

Trả lời

48

Phương thức đó chỉ bị ảnh hưởng khi bạn sử dụng các mục trong IEnumerable. Hãy nhớ rằng, IEnumerable lười tải các mục, vì vậy chỉ vì bạn đang gọi phương thức trả về IEnumerable, không có nghĩa là phương thức này thực sự được gọi vào thời điểm đó. Nếu bạn muốn nó bị trúng ngay khi bạn gọi nó, hãy thêm một ToList() vào cuối cuộc gọi phương thức của bạn:

var result = myEnumerableMethod().ToList(); 
+0

Cảm ơn vì điều đó. Tôi biết có một lý do hợp lý nhưng không thể nhớ tại sao. :) –

0

Sẽ không có vấn đề gì khi gỡ lỗi triển khai IEnumerable ... Có thể bạn chỉ cần sử dụng sai .dll (nếu bạn Enumerator là trong thư viện bên ngoài) ...

bạn có thể thử một giao diện điều khiển kiểm tra đơn giản, và đi từ đây

class Program 
{ 
    static void Main(string[] args) 
    { 
     foreach (String foo in new Foo()) 
     { 
      Console.WriteLine(foo); 
     } 
    } 
} 

class Foo : IEnumerable<String> 
{ 
    #region IEnumerable<string> Members 

    public IEnumerator<string> GetEnumerator() 
    { 
     yield return "fake # 1"; 
     yield return "fake # 2"; 
    } 

    #endregion 

    #region IEnumerable Members 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 

    #endregion 
} 
Các vấn đề liên quan