C# IEnumerable<;T>;GetEnumerator()exexcution

C# IEnumerable<;T>;GetEnumerator()exexcution,c#,.net-3.5,ienumerable,C#,.net 3.5,Ienumerable,因此,我的一个类实现了IQueryable,它需要GetEnumerator方法,代码如下所示: public IEnumerator<T> GetEnumerator() { this.ParseExpression(this.expression); return this.GetResults() } private IEnumerator<T>

因此,我的一个类实现了IQueryable,它需要GetEnumerator方法,代码如下所示:

        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;
        }
public IEnumerator GetEnumerator()
{
this.ParseExpression(this.expression);
返回此参数。GetResults()
}
私有IEnumerator GetResults()
{
//处理表达式树。
T=Activator.CreateInstance(typeof(T));
收益率T;
}

奇怪的是,当控件进入第一个方法时,它会跳到它的末尾(进入GetResults()方法之前的右括号)。这是否意味着GetResults()方法由编译器隐式地在另一个线程上执行,这是因为类实现了IEnumerable?

否,这意味着编译器添加了更多代码,您看不到这些代码被执行,因为没有代表它的源代码


当您使用
yield
时,编译器会为您创建枚举器的实现。调用
GetResults
并不会真正调用您的方法,而是调用该枚举器的构造函数。只有当您开始从枚举器读取时,才会第一次调用您的方法。

否,这意味着e是编译器添加的更多代码,您看不到执行的代码,因为没有表示它的源代码

当您使用
yield
时,编译器会为您创建枚举器的实现。调用
GetResults
并不会真正调用您的方法,而是调用该枚举器的构造函数。只有当您开始从枚举器读取时,才会第一次调用您的方法