例子:
myObject.Stub(s => s.MyMethod(null)).IgnoreArguments().Return("bleh");
var s = "s";
在lambda表达式中定义了一个变量“s”,在同一方法中又定义了另一个名为“s”的局部变量。当我将光标悬停在第一个“s”上时,Visual Studio告诉我“下面定义了一个冲突的变量”。为什么会有冲突呢?Lambda表达式中的“s”显然在其封闭括号之外是不可用的。
例子:
myObject.Stub(s => s.MyMethod(null)).IgnoreArguments().Return("bleh");
var s = "s";
A local variable named 's' cannot be declared in this scope because it would give a different meaning to 's', which is already used in a 'child' scope to denote something else
C#不允许您在同一块中使用相同的简单名称表示两个不同的含义,因为这样做会使代码容易出错、难以编辑、难以阅读、难以重构和难以调试。禁止这种不良编程实践比允许它并冒着您假设“s”在整个块中都具有相同含义而导致错误的风险更好。
当代码仅有两行时,很容易记住s有两个不同的含义,但当代码有数百行时,就不那么容易了。
有关此规则的更多信息,请参见: