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

本文关键字:方法 表达式 执行 lambda 为什么 | 更新日期: 2023-09-27 18:06:31

我有一个简单的测试程序,想知道为什么控制台输出是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;
    }

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

IEnumerable是惰性的。该表达式直到需要时才求值,因此永远不会调用test

添加Console.WriteLine(g.ToList());,您将看到现在如何调用test方法。你可以在你的代码中使用以下命令来强制求值:var g = t.Select(a => test(a, s)).ToList();这将导致可枚举对象被求值为一个列表。

参见延迟求值:

在编程语言理论中,惰性求值或按需调用是一种求值策略,它将表达式的求值延迟到需要它的值时(非严格求值),并避免重复求值(共享)。

注意:通常不鼓励使用会产生副作用的LINQ代码,请参阅本博客文章的第4段。