Отладка метода IEnumerable
У меня есть метод с возвратом IEnumerable<T>
, и я пытаюсь отлаживать код внутри этого метода.
Каждый раз, когда я выполняю код в Visual Studio во время отладки, он выполняет шаги над рассматриваемым методом.
Когда я помещаю точку останова внутри метода, она никогда не попадает. Код определенно работает, поскольку я тестировал yield return
'ing fake T из метода.
Невозможно ли отлаживать IEnumerable методы таким образом, или я делаю что-то еще не так?
Ответы
Ответ 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
}