2010-01-12 72 views
21

我有一個返回IEnumerable<T>的方法,我試圖調試該方法中的代碼。調試IEnumerable方法

每次我在調試過程中逐句通過Visual Studio中的代碼時,它都會遍歷所討論的方法。

當我在方法中放置一個斷點時,它永遠不會被命中。該代碼正在運行,因爲我已經通過yield return測試了該方法中的假T。

是不是可以用這種方法調試IEnumerable方法,還是我做了其他的錯誤?

回答

48

只有在使用IEnumerable中的項時纔會觸發該方法。請記住,IEnumerable懶加載項目,所以只是因爲你調用返回IEnumerable的方法,並不意味着該方法實際上在那個時候被調用。如果你想讓它變得向右打的時候你怎麼稱呼它,添加ToList()在你的方法調用的末尾:

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

感謝您的。我知道有一個合乎邏輯的原因,但不記得原因。 :) – 2010-01-12 15:13:27

0

它應該是調試IEnumerable的實施沒有問題... ...可能是你只是用錯誤的.dll文件(如果枚舉是在外部庫)...

您可以嘗試一個簡單的測試臺,從這裏去

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 
}