gpt4 book ai didi

c# - 不能在此范围内声明局部变量[Linq/Lambda 表达式]

转载 作者:太空狗 更新时间:2023-10-29 20:53:22 24 4
gpt4 key购买 nike

我在 C# 中有以下代码片段

static void Main()
{
var numbers = new[] { 1, 2, 3, 4, 5, 6 };

var ngt5 = numbers.Where(n => n > 5);

var n = ngt5.First().ToString();

Console.WriteLine(n, numbers);
}

编译上述代码时出现以下错误

不能在此范围内声明名为“n”的局部变量

最佳答案

你的问题在这里:

// Within your lambda you have an 'n'.
var ngt5 = numbers.Where(n => n > 5);

// And within the outer scope you also have an 'n'.
var n = ngt5.First().ToString();

要理解为什么这是一个问题,请考虑以下代码:

int n = 1000;
var evens = Enumerable.Range(1, 1000).Where(n => n % 2 == 0);

上面的表达式 n % 2 == 0 是有歧义的:我们在谈论哪个 n?如果我们谈论的是外部n,那么n % 2 == 0总是为真,因为n 只是 1000(因此 evens 将包含从 1 到 1000 的所有数字)。另一方面,如果我们谈论的是 inner n,那么 n % 2 == 0 将只对偶数值成立n(evens 将是 2、4、6、... 1000)。

要认识到的重要一点是,在 lambda 外部声明的变量可以从 lambda 范围内访问。

int n = 0;
Action incrementN = () => n++; // accessing an outer variable
incrementN();
Console.WriteLine(n); // outputs '1'

这就是存在歧义的原因,也是不允许歧义的原因。


解决方案就是为您的 lambda 选择一个不同的变量名;例如:

var ngt5 = numbers.Where(x => x > 5);

关于c# - 不能在此范围内声明局部变量[Linq/Lambda 表达式],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com