使用is运算符的变量初始化在使用相同的变量名时会出错

时间:2017-10-25 20:57:01

标签: c# scope operators c#-7.0

我在使用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语句使用不同的变量名。

1 个答案:

答案 0 :(得分:3)

This page对正在发生的事情做了很好的解释。基本上,正如错误所指示的那样,初始化变量在ifelse 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