C# IEnumerable如何在具有Yield-return的方法中返回元素/项 类程序{ 静态列表; 静态void Main(字符串[]参数){ MyList=新列表(){1,24,56,7}; var sn=FilterWithYield(); } 静态IEnumerable FilterWithYield(){ foreach(MyList中的int i){ 如果(i>3) 收益率i; } } }

C# IEnumerable如何在具有Yield-return的方法中返回元素/项 类程序{ 静态列表; 静态void Main(字符串[]参数){ MyList=新列表(){1,24,56,7}; var sn=FilterWithYield(); } 静态IEnumerable FilterWithYield(){ foreach(MyList中的int i){ 如果(i>3) 收益率i; } } },c#,C#,问题:IEnumerable是一种只读类型。所以我的问题是IEnumerable如何只返回一个元素。IEnumerable方法没有要添加的内容。它是否从IEnumerator的属性“Current”返回。??如果是这样的话,我们能说每次收益率返回一个元素/项目时,它是IEnumerator的当前属性吗 使用yield关键字时,表示该方法是迭代器。使用yield来定义迭代器,就不需要显式的额外类来保存枚举的状态 当您使用foreach语句使用迭代器方法时,foreach循环的每次迭代都会调用迭代器

问题:IEnumerable是一种只读类型。所以我的问题是IEnumerable如何只返回一个元素。IEnumerable方法没有要添加的内容。它是否从IEnumerator的属性“Current”返回。??如果是这样的话,我们能说每次收益率返回一个元素/项目时,它是IEnumerator的当前属性吗

使用
yield
关键字时,表示该方法是迭代器。使用
yield
来定义迭代器,就不需要显式的额外类来保存枚举的状态


当您使用
foreach
语句使用迭代器方法时,
foreach
循环的每次迭代都会调用迭代器方法。当迭代器方法中到达
yield return
语句时,将返回表达式,并保留代码中的当前位置。下次调用迭代器函数时,将从该位置重新启动执行。

听起来您可能想要阅读,Jon的建议很好。您可能还想阅读以下内容:
class Program {
    static List<int> MyList;
    static void Main(string[] args) {
        MyList = new List<int>() { 1,24,56,7};
        var sn = FilterWithYield();
    }

    static IEnumerable<int> FilterWithYield() {
        foreach (int i in MyList) {
            if (i > 3)
                yield return i;
        }
    }
}