我在使用is
运算符检查类型时使用C#7.0语法初始化变量。我想使用相同的变量名称,比如说#34; animal",用于所有场景,如下所示:
// Yes, polymorphism may be better. This is just an illustration.
if (item is Dog animal) { // ... }
else if (item is Cat animal) { // ... }
else if (item is Animal animal) { // ... }
else { // ... }
但是,我收到一个错误,指出变量名在封闭范围内使用。有办法解决这个问题吗?我真的不必为每个else if
语句使用不同的变量名。
答案 0 :(得分:3)
This page对正在发生的事情做了很好的解释。基本上,正如错误所指示的那样,初始化变量在if
和else if
语句的封闭范围内可用。这与out
参数的工作方式类似。所以,是的,当使用一系列if
语句时,您只能使用一次变量名。
另一种方法是使用switch
代替if
:
switch (item) {
case Dog animal:
// ...
break;
case Cat animal:
// ...
break;
case Animal animal:
// ...
break;
default:
// Interestingly, you cannot reuse the variable name here.
// But you could create a new scope and then reuse it.
{
Animal animal = ...
}
break;
}
switch
中初始化的变量仅限于case
的范围。 See also