调试IEnumerable方法

时间:2010-01-12 14:55:50

标签: c# debugging ienumerable

我有一个返回IEnumerable<T>的方法,我正在尝试调试该方法中的代码。

每次我在调试期间单步浏览Visual Studio中的代码时,它都会跳过相关方法。

当我在方法中放置一个断点时,它永远不会被击中。代码肯定在运行,因为我已经通过方法yield return测试假T来测试。

是不可能以这种方式调试IEnumerable方法,还是我做错了什么?

2 个答案:

答案 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
}