2010-01-12 13 views
21

Tengo un método con devuelve un IEnumerable<T> y estoy tratando de depurar el código dentro de ese método.Depuración de un método de IEnumerable

Cada vez que paso por el código en Visual Studio durante la depuración, se pasa al método en cuestión.

Cuando coloco un punto de interrupción dentro del método, nunca se golpea. El código se está ejecutando definitivamente ya que he probado yield return 't falso del método.

¿No es posible eliminar la depuración de los métodos de IEnumerable de esta forma o puedo hacer algo más?

Respuesta

48

Ese método solo se ve afectado cuando utiliza los elementos en IEnumerable. Recuerde, IEnumerable flojo carga los artículos, así que solo porque está llamando al método que devuelve el IEnumerable, no significa que el método en realidad se está llamando en ese momento. Si usted quiere que recibe un golpe justo cuando usted lo llama, agregar un ToList() al final de su llamada al método:

var result = myEnumerableMethod().ToList(); 
+0

Gracias por eso. Sabía que había una razón lógica pero no podía recordar por qué. :) –

0

Debería haber ningún problema para depurar la aplicación IEnumerable ... Puede ser que simplemente usando .dll mal (si es empadronador en la biblioteca externa) ...

usted puede tratar de una consola de prueba simple, e ir de aquí

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 
} 
Cuestiones relacionadas