gpt4 book ai didi

c# - Lambda 变量作用域

转载 作者:太空狗 更新时间:2023-10-29 20:18:41 25 4
gpt4 key购买 nike

例子:

myObject.Stub(s => s.MyMethod(null)).IgnoreArguments().Return("bleh");

var s = "s";

变量“s”在 lambda 中定义,另一个变量“s”在同一方法中定义为局部变量。当我将鼠标悬停在第一个“s”上时,Visual Studio 告诉我“下面定义了一个冲突的变量”。为什么这些相互矛盾; lambda 中的“s”肯定在它的括号之外不可用?

最佳答案

它们是冲突的,因为 C# 的规则是任何两次使用相同的简单名称不能用于指代两个不同的事物,在 block 内立即包含它们中的任何一个。在您的示例中,简单名称“s”用于表示包含局部变量声明的 block 内的两件事:它表示局部变量和 lambda 参数。 是非法的。我注意到您收到的错误消息告诉您:

A local variable named 's' cannot be declared in this scope because itwould give a different meaning to 's', which is already used in a 'child' scope to denote something else

C# 不允许您在同一 block 中使用相同的简单名称来表示两件事,因为这样做会使代码容易出错、难以编辑、难以阅读、难以重构和调试。最好是禁止这种糟糕的编程习惯,而不是允许它并冒着导致错误的风险,因为您假设“s”在整个 block 中表示相同的东西。

当代码只有两行时,很容易记住 s 的两种不同含义,但是当代码长达数百行时,就不是那么容易了。

有关此规则的更多信息,请参阅:

Link

关于c# - Lambda 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com