为什么Lambda变量范围存在于LINQ查询之外?

Nik*_*wal 5 .net c# linq scope

我读了这个问题(C#中lambda变量的范围是什么?)

但它是关于LINQ Query中的Lambda变量范围.

现在问我的问题

可以说我有一个非常简单的LINQ查询.

var Foo = FoobBar.Select(x => x);
var x = somefunction();
Run Code Online (Sandbox Code Playgroud)

编译说:A local variable 'x' cannot be declared in this scope because it would give a different meaning to 'x', which is already used in a 'child' scope to denote something else.

为什么会这样?当LINQ查询结束时,Lambda变量是否应该不存在?

编辑:在阅读答案后,我得出结论,它的外部x(从函数返回)其范围扩展到LINQ Query内.

def*_*ale 9

它与LINQ无关,它与儿童范围有关.

例如:

foreach (var bar in FooBar.Bars)
        {
            var x = FooBar.GetFoo();
        }
var x = new Foo();
Run Code Online (Sandbox Code Playgroud)

从编译器生成完全相同的错误消息.

要解决此问题,您只需将变量放在不同的(非嵌套)范围中.例如:

foreach (var bar in FooBar.Bars)
        {
            var x = FooBar.GetBar();
        }
{
    var x = new Foo();
}
Run Code Online (Sandbox Code Playgroud)