Подтвердить что ты не робот

Отладка метода IEnumerable

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

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

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

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

4b9b3361

Ответ 1

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

var result = myEnumerableMethod().ToList();

Ответ 2

Не следует отлаживать реализацию 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
}