2011-01-02 4 views
0

그래서 내 클래스 중 하나는 GetEnumerator 메서드를 필요로하는 된 IQueryable을 구현하고 코드는 다음과 같습니다 : 컨트롤이 첫 번째 방법을 입력하면는 IEnumerable <T>하는 GetEnumerator() exexcution

 public IEnumerator<T> GetEnumerator() 
     { 
      this.ParseExpression(this.expression); 
      return this.GetResults() 

     } 

     private IEnumerator<T> GetResults() 
     { 
       //Processes the expression tree. 

       T t = Activator.CreateInstance(typeof(T)); 
       yield return T; 
     } 

이상한 부분이가 생략된다 GetResults() 메서드를 입력하기 전에 닫는 중괄호 대괄호. 클래스가 IEnumerable을 구현한다는 사실 때문에 GetResults() 메서드가 컴파일러에서 암시 적으로 다른 스레드에서 실행된다는 의미입니까?

답변

4

아니요, 컴파일러에서 추가 한 코드가 더 많음을 의미합니다. 그것을 나타내는 소스 코드가 없다.

yield을 사용하면 컴파일러에서 열거 자 구현을 만듭니다. GetResults을 호출하면 실제로 메서드를 호출하지 않고 해당 열거 자의 생성자를 호출합니다. 열거 자에서 메서드가 처음 호출되는 것을 읽는 것입니다.

관련 문제