2010-09-09 2 views
2

Можно создать дубликат:
Case Statement Block Level Declaration Space in C#Почему C# разрешает объявление переменных с одинаковым числом внутри разных блоков case для операторов switch?

Например:

string danger; 
switch (this.Type) 
{ 
    case Warfare.Nuclear: 
    case Warfare.Biological: 
    case Warfare.Chemical: 
     danger = "deadly"; 
     break; 

    case Warfare.Air: 
     string threat = "major" 

     ... 

     break; 

    case Warfare.Ground: 
     string threat = "medium" 

     ... 

     break; 
} 

Почему я не могу просто определить локальные переменные с тем же именем в каждом, без использования разные имена или объявление переменной вне оператора switch, которая в любом случае не будет использоваться вне нее.

+4

увидеть это: http://stackoverflow.com/questions/1074589/case-statement-block-level-declaration-space -in-c – kemiller2002

+0

@Kevin - Спасибо. Эрик Липперт всегда знает. Думаю, вы не ожидали бы меньше от команды компилятора. – kbrimington

+1

См. Также http://blogs.msdn.com/b/ericlippert/archive/2009/08/13/four-switch-oddities.aspx –

ответ

7

Оператор case не определяет область переменной. Вы можете добавить что-то в фигурные скобки внутри вашего оператора case, чтобы определить новую область переменной.

2

Заключите случае блоки {}, чтобы сузить сферу применения одинаково названных переменных

Смежные вопросы