调试IEnumerable方法

我有一个返回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 { #region IEnumerable Members public IEnumerator GetEnumerator() { yield return "fake # 1"; yield return "fake # 2"; } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion }