最近我写了一些代码,不小心在一个函数内部的一个动作声明中把一个变量名称当做参数重复使用了,在这个函数里面已经有一个同名变量了。例如:
var x = 1;
Action<int> myAction = (x) => { Console.WriteLine(x); };
当我发现这个重复代码时,我很惊讶看到它能够编译和运行,而这不是我根据我对C#作用域的了解所期望的行为。一些快速的谷歌搜索显示出类似的代码产生错误,如Lambda Scope Clarification中所述的那样。 (我将该示例代码粘贴到我的IDE中以确保它可以运行; 它完美运行。) 此外,当我进入Visual Studio中的Rename对话框时,第一个x
被突出显示为名称冲突。
为什么这段代码能够工作? 我使用的是带有Visual Studio 2019的C#8。