C#LINQ/Lambda范围问题

Mob*_*erg 0 c# linq lambda

我收到错误:

名为's'的局部变量不能在此范围内声明,因为它会给's'赋予不同的含义,'s'已在'子'范围内用于表示其他内容.

static void Main(string[] args)
{
    string s = "hello"; // Line 1
    var test = new[] { "abd", "def" }.Select(s => s.StartsWith("a")); // Line 2
}
Run Code Online (Sandbox Code Playgroud)

为什么?

我猜想第1行的's'会被'.Select(s => ..'第2行中的'decleration)阴影但是 - 据我所知 - 事实并非如此......

PS我不确定是否用正确的术语表示 - 如果有更好的单词/短语,请纠正我.

Dav*_*ell 6

由于在正常的代码块(如if语句或循环)中,您不能声明与代码块外部具有相同名称的变量,因此会出现错误.

这与类变量和方法变量不同,您可以使用this关键字显式引用类变量.

我认为this关键字是关键,因为没有任何方法可以显式引用同一方法但在不同代码块中的变量.