Sea*_*ean 3 c# ienumerable lambda
我有一个简单的测试程序,并想知道为什么控制台输出是1而不是6?谢谢.
static void Main(string[] args)
{
var t = new List<int>() {1, 1, 1, 1, 1};
var s = new List<int>() {1};
var g = t.Select(a => test(a, s));
Console.WriteLine(s[0]);
}
private static int test(int a, List<int> s )
{
s[0]++;
return a;
}
Run Code Online (Sandbox Code Playgroud)
IEnumerable是懒惰的.表达式在需要之前不会被计算,因此test永远不会被调用.
添加Console.WriteLine(g.ToList());,您将看到test现在如何调用该方法.您可以使用以下命令强制在代码中对其进行评估:var g = t.Select(a => test(a, s)).ToList();这将导致可枚举值被计算到列表中.
请参阅懒惰评估:
在编程语言理论中,惰性评估或按需调用是一种评估策略,它将表达式的评估延迟到需要它的值(非严格评估)并且还避免重复评估(共享).
注意:通常不鼓励使用导致副作用的LINQ代码,请参阅此博客文章的第4段.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |