C# 使用';时已定义局部变量;是';关键字-不符合语言引用
根据C#语言参考 如果expr为C# 使用';时已定义局部变量;是';关键字-不符合语言引用,c#,C#,根据C#语言参考 如果expr为true且is与If语句一起使用,则varname将被分配,并且仅在If语句中具有局部范围 上述操作会产生以下错误: 此范围中已定义名为“folder”的局部变量或函数 为什么我不能重用变量名,因为它应该是每个if语句的局部变量名 您必须理解If不是范围限制语法 表示If语句的任何外部可用 它将限制在If循环内声明的变量的范围,而不是在If条件中声明它自己 根据: 让我们从范围开始,详细研究这两个规则。这个 变量c仅在第一个if的else分支的作用域中 陈述变量s
true
且is
与If
语句一起使用,则varname将被分配,并且仅在If
语句中具有局部范围
上述操作会产生以下错误:
此范围中已定义名为“folder”的局部变量或函数
为什么我不能重用变量名,因为它应该是每个if
语句的局部变量名
这是否奇怪且令人困惑(如果
没有设置范围,而else
设置范围)?是的,是的 给定的文件夹可以在第一个之后分配,如果,那么它显然具有功能级别的作用域。@mjwills,但这肯定不是预期的行为。为什么会有人重复使用这样一个变量?例如,对于
循环,您不能重复使用中定义的变量。根据我下面的回答,它是有文档记录的,并且是有意使用的。是的,令人困惑。:)为什么循环的工作方式不一样?因为它们创建了一个新的作用域(如果..is
没有),那么,@S.McPharlin为什么会有人重复使用这样的变量?例如:if(!(obj是某物)){throw new Exception();}/*这里您可以使用某物*/
。我最初将其标记为重复。经过进一步的思考,我认为复制的问题与这里讨论的不同。在这方面获得一些ECMA规范会很好,但遗憾的是,它们还不能用于7.0。不管怎么说,你在宣传栏上击败了我,向上投票
expr is type varname
if(first_object is Folder folder)
{
// ...
}
if(second_object is Folder folder) // ERROR!
{
// ...
}
public static double ComputeAreaModernIs(object shape)
{
if (shape is Square s)
return s.Side * s.Side;
else if (shape is Circle c)
return c.Radius * c.Radius * Math.PI;
else if (shape is Rectangle r)
return r.Height * r.Length;
// elided
throw new ArgumentException(
message: "shape is not a recognized shape",
paramName: nameof(shape));
}