C# 为什么执行lambda表达式中的方法
我有一个简单的测试程序,不知道为什么控制台 输出是1而不是6? 多谢各位C# 为什么执行lambda表达式中的方法,c#,lambda,ienumerable,C#,Lambda,Ienumerable,我有一个简单的测试程序,不知道为什么控制台 输出是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(
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;
}
static void Main(字符串[]args)
{
var t=new List(){1,1,1,1,1};
var s=新列表(){1};
var g=t.Select(a=>test(a,s));
控制台写入线(s[0]);
}
专用静态整型测试(整型a,列表s)
{
s[0]++;
返回a;
}
。表达式在需要时才会计算,因此永远不会调用test
添加Console.WriteLine(例如ToList())
您将看到现在如何调用test
方法。您可以使用:var g=t.Select(a=>test(a,s)).ToList()在代码中强制对其求值代码>这将导致可枚举项被计算到列表中
见:
在编程语言理论中,延迟求值或按需调用是一种求值策略,它延迟表达式的求值,直到需要它的值为止(非严格求值),并避免重复求值(共享)
注意:通常不鼓励使用会产生副作用的LINQ代码,请参阅。的第4段,因为延迟执行。将.ToList()
添加到选择行的末尾。