【发布时间】:2020-11-08 17:37:38
【问题描述】:
所以我的问题是:
为什么(以及如何避免)C# 中的 Is 运算符的生命周期与 if 中使用的一样长?
例子:
Animal a = new Cat();
if (a is Cat c)
{
Console.WriteLine(c); // Works
}
Console.WriteLine(c); // Works too
// Leads to an error because c is allready declared
if (a is Cat c)
{
....
}
我所期望的是,因为我在 if 条件中声明了变量 c,所以它将被限定为该 if 条件,这是不正确的。
编辑: 我理解括号参数(范围以括号开头并以它结尾)。 但是
为什么 for 循环那么不同?
for (int i = 0; i<3; i++)
{
....
}
Console.WriteLine(i) // error
【问题讨论】:
-
Console.WriteLine(c); // 也有效 真的吗???
-
@TaW 是的,在这个问题的上下文中(变量范围)
-
不在这里。我无法复制。
-
Me neither... 编译错误(第 12 行,第 21 列):使用未分配的局部变量 'c'
-
Also well documented: "如果 expr 为真并且与 if 语句一起使用,则 varname 仅在 if 语句中分配。varname 的范围是从 is 表达式到结尾封闭 if 语句的块。在任何其他位置使用 varname 都会生成编译时错误,以使用尚未分配的变量。"