iCo*_*ode 2 c# ienumerable yield-return
以下是我的代码:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在FilterWithYield方法中有一个突破点,但它根本没有达到突破点.我在调用点有一个中断,即 var sn = FilterWithYield();Control点击此点并在调试窗口中正确显示结果.但是为什么控制不在FilterWithYield方法中停止?
还有一个问题.我读到yield将数据返回给调用者.如果将FilterWithYield方法的返回类型更改为通过错误将其返回到int,那么yield关键字是否总是需要IEnumerable<T>作为返回类型?
das*_*ght 18
您可以调试该方法.问题是,您尝试访问的代码永远不会被执行.
IEnumerableyield return生成代码的方法,使您的序列延迟,当您通过枚举.但是,当你这样做
var sn = FilterWithYield();
Run Code Online (Sandbox Code Playgroud)
你准备枚举序列,但你没有开始枚举它.
另一方面,如果您在结果上添加foreach循环或调用ToList(),则会破坏您的断点:
foreach (var n in FilterWithYield()) {
Console.WriteLine(n);
}
Run Code Online (Sandbox Code Playgroud)
要么
var sn = FilterWithYield().ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |