我有一個返回IEnumerable<T>
的方法,我試圖調試該方法中的代碼。調試IEnumerable方法
每次我在調試過程中逐句通過Visual Studio中的代碼時,它都會遍歷所討論的方法。
當我在方法中放置一個斷點時,它永遠不會被命中。該代碼正在運行,因爲我已經通過yield return
測試了該方法中的假T。
是不是可以用這種方法調試IEnumerable方法,還是我做了其他的錯誤?
我有一個返回IEnumerable<T>
的方法,我試圖調試該方法中的代碼。調試IEnumerable方法
每次我在調試過程中逐句通過Visual Studio中的代碼時,它都會遍歷所討論的方法。
當我在方法中放置一個斷點時,它永遠不會被命中。該代碼正在運行,因爲我已經通過yield return
測試了該方法中的假T。
是不是可以用這種方法調試IEnumerable方法,還是我做了其他的錯誤?
只有在使用IEnumerable中的項時纔會觸發該方法。請記住,IEnumerable懶加載項目,所以只是因爲你調用返回IEnumerable的方法,並不意味着該方法實際上在那個時候被調用。如果你想讓它變得向右打的時候你怎麼稱呼它,添加ToList()在你的方法調用的末尾:
var result = myEnumerableMethod().ToList();
它應該是調試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
}
感謝您的。我知道有一個合乎邏輯的原因,但不記得原因。 :) – 2010-01-12 15:13:27