2017-10-25 24 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 문을 사용할 때 변수 이름을 한 번만 사용할 수 있습니다.

대안은 switch 대신 if의 AN을 사용하는 것이 다음 switch 초기화

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; 
} 

변수들은 case의 범위로 제한된다. See also.