我最近写了一些代码,在其中我无意中将变量名重用为函数中声明的操作的参数,该函数已经具有相同名称的变量。例如:
var x = 1;
Action<int> myAction = (x) => { Console.WriteLine(x); };
当我发现重复项时,我很惊讶地看到代码可以完美地编译和运行,这并不是基于我对C#范围的了解而期望的行为。一些快速的Google搜索出现SO问题,它们抱怨类似的代码确实会产生错误,例如Lambda Scope Clarification。(我将示例代码粘贴到IDE中,以确保它可以运行;只是为了确保它可以正常运行。)此外,当我在Visual Studio中进入“重命名”对话框时,第一个x
突出显示为名称冲突。
为什么此代码有效?我在Visual Studio 2019中使用C#8。
x
方法的整个参数都移出了作用域。有关示例,请参见Sharplab。