Отладка метода IEnumerable - PullRequest
24 голосов
/ 12 января 2010

У меня есть метод с возвратом IEnumerable<T>, и я пытаюсь отладить код внутри этого метода.

Каждый раз, когда я перебираю код в Visual Studio во время отладки, он переходит к рассматриваемому методу.

Когда я размещаю точку останова внутри метода, она никогда не попадает в цель. Код определенно выполняется, как я проверял, yield return используя поддельные T из метода.

Разве нельзя отлаживать методы IEnumerable таким способом или я делаю что-то еще неправильно?

Ответы [ 2 ]

51 голосов
/ 12 января 2010

Этот метод получает удар только при использовании элементов в IEnumerable. Помните, что IEnumerable lazy загружает элементы, поэтому если вы вызываете метод, который возвращает IEnumerable, это не означает, что метод в действительности вызывается в этот момент. Если вы хотите, чтобы он получал правильный удар при вызове, добавьте ToList () в конце вызова вашего метода:

var result = myEnumerableMethod().ToList();
0 голосов
/ 12 января 2010

Не должно быть проблем с отладкой реализации 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
}
...