expr is type varname
如果expr为
true
,并且is
与if
语句一起使用,则varname被分配并且仅在if
语句中具有本地作用域 >。
if(first_object is Folder folder)
{
// ...
}
if(second_object is Folder folder) // ERROR!
{
// ...
}
以上内容会产生以下错误:
已在此范围内定义了名为“文件夹”的局部变量或函数
为什么只在每个if
语句中使用变量名,为什么不能重用它呢?
答案 0 :(得分:1)
根据the docs:
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));
}
让我们从范围开始详细研究这两个规则。的 变量c仅在第一个if的else分支中在范围内 声明。变量s在方法的范围内 ComputeAreaModernIs。那是因为if语句的每个分支 建立变量的单独作用域。但是,if语句 本身没有。 这意味着在if语句中声明的变量为 与if语句(在本例中为方法)的作用域相同。 行为并非特定于模式匹配,而是已定义 范围和if和else语句的行为。
这很奇怪并且令人困惑(if
未设置作用域,而else
却设置了作用域)吗?是的,是的。 :)
答案 1 :(得分:0)