2010-01-12 29 views
21

IEnumerable<T> döndüren bir yöntem var ve bu yöntem içindeki kodu hata ayıklamaya çalışıyorum.IEnumerable bir yöntemde hata ayıklama

Hata ayıklama sırasında Visual Studio'daki kod boyunca her adımda, söz konusu yönteme göre geçer.

Metodun içine bir kesme noktası yerleştirdiğimde asla vurulmaz. Kod, yield return tarafından sahte T'ler tarafından sınanmış olduğum gibi kesinlikle çalışıyor.

IEnumerable yöntemlerini bu şekilde ayıklamak mümkün değil mi yoksa başka bir şey mi yanlış yapıyorum?

cevap

48

Bu yöntem, yalnızca IEnumerable öğesinde öğeleri kullandığınızda vurulur. Unutmayın, IEnumerable tembel öğeleri yükler, bu yüzden IEnumerable'ı döndüren yöntemi çağırıyorsanız, yöntemin aslında bu noktada çağrılması anlamına gelmez. Eğer bunu, diyoruz senin yöntem çağrısının sonunda() Bir ToList eklerken doğru vurulmak isterseniz: IEnumerable uygulanmasını hata ayıklamak için sorun olmamalıdır

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

Teşekkür gidebilir. Mantıksal bir sebep olduğunu biliyordum ama nedenini hatırlayamadım. :) –

0

... sadece kullanarak olabilir yanlış .dll (harici kütüphanede listeleyicisi ise) ...

sen basit bir test konsolu deneyin ve buradan bunun için

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 
}