我有一个返回IEnumerable<T>
的方法,我正在尝试调试该方法中的代码。
每次我在调试期间单步浏览Visual Studio中的代码时,它都会跳过相关方法。
当我在方法中放置一个断点时,它永远不会被击中。代码肯定在运行,因为我已经通过方法yield return
测试假T来测试。
是不可能以这种方式调试IEnumerable方法,还是我做错了什么?
答案 0 :(得分:51)
当您使用IEnumerable中的项目时,该方法才会被触发。请记住,IEnumerable延迟加载项目,所以只是因为你正在调用返回IEnumerable的方法,并不意味着该方法实际上在那时被调用。如果您希望在调用它时立即点击它,请在方法调用结束时添加ToList():
var result = myEnumerableMethod().ToList();
答案 1 :(得分: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
}