2017-10-25 6 views
2

is演算子を使用して型をチェックするときに、C#7.0構文を使用して変数を初期化しています。同じ変数名を使用すると、is演算子を使用した変数初期化エラーが発生する

// 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ステートメントの異なる変数名を使用する必要はありません。

答えて

3

This pageには何が起こっているかの素敵な説明があります。基本的には、エラーが示すように、初期化された変数はifelse ifステートメントの囲みスコープで使用できます。これは、outのパラメータの働きと同様です。したがって、一連のifステートメントを使用する場合、変数名は1回だけ使用できます。

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の範囲には限定されています

の代替ではなくifswitchを使用することです。 See also

関連する問題