2010-01-12 5 views
21

J'ai une méthode avec retourne un IEnumerable<T> et j'essaye de déboguer le code à l'intérieur de cette méthode.Débogage d'une méthode IEnumerable

Chaque fois que je passe en revue le code dans Visual Studio pendant le débogage, il passe la méthode en question. Lorsque je place un point d'arrêt à l'intérieur de la méthode, il n'est jamais touché. Le code est définitivement en cours d'exécution que j'ai testé par yield return 'faux T de la méthode.

Est-il impossible de déboguer les méthodes IEnumerable de cette façon ou est-ce que je fais autre chose de mal?

Répondre

48

Cette méthode est uniquement utilisée lorsque vous utilisez les éléments dans IEnumerable. Rappelez-vous, IEnumerable paresseux charge les éléments, donc juste parce que vous appelez la méthode qui retourne le IEnumerable, ne signifie pas que la méthode est effectivement appelée à ce moment-là. Si vous voulez être frappé à droite quand vous l'appelez, ajoutez un ToList() à la fin de l'appel de la méthode:

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

Merci pour cela. Je savais qu'il y avait une raison logique, mais je ne me souviens pas pourquoi. :) –

0

Il devrait y avoir aucun problème pour déboguer la mise en œuvre IEnumerable ... Peut-être que vous venez de l'aide mauvais .dll (si vous recenseur est dans la bibliothèque externe) ...

vous pouvez essayer une console de test simple, et passer d'ici

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 
} 
Questions connexes