Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么执行lambda表达式中的方法_C#_Lambda_Ienumerable - Fatal编程技术网

C# 为什么执行lambda表达式中的方法

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(

我有一个简单的测试程序,不知道为什么控制台 输出是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;
    }
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()
添加到
选择行的末尾。