2010-01-12 2 views
21

반환 방법이 IEnumerable<T>인데 그 메서드 내에서 코드를 디버깅하려고합니다.IEnumerable 메서드 디버깅

디버그 중에 Visual Studio의 코드를 단계별로 실행할 때마다 문제의 메서드를 단계별로 실행합니다.

메서드 내에 중단 점을 배치하면 절대로 충돌하지 않습니다. 방법은 가짜 T를 yield return '테스트하여 코드가 제대로 실행되고 있습니다.

IEnumerable 메서드를 이런 방식으로 디버깅 할 수 없습니까? 아니면 내가 다른 뭔가를하고 있습니까?

답변

48

해당 메서드는 IEnumerable의 항목을 사용할 때만 적중됩니다. 기억할 것은 IEnumerable은 항목을로드하기 때문에 IEnumerable을 반환하는 메서드를 호출한다고해서 해당 메서드가 실제로 해당 지점에서 호출되는 것은 아닙니다. 당신이 당신이 그것을 호출하여 메소드 호출의 끝에서()는 ToList를 추가 할 때 잘 맞고하려면 : IEnumerable을 구현을 디버깅 할 문제가 없습니다

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

감사를 갈 수 있습니다. 나는 논리적 인 이유가 있었지만 그 이유를 기억할 수 없다는 것을 알고있었습니다. :) –

0

... 그냥 사용 할 수 있음 잘못된 .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 
} 
관련 문제