Объявление переменной в операторе переключения C#

Почему в операторе переключения C# для переменной, используемой 9X_csharp в нескольких случаях, вы объявляете ее только 9X_csharp в первом случае?

Например, следующее вызывает 9X_switch-statement ошибку «Локальная переменная с именем 'переменная' уже 9X_c# определена в этой области».

switch (Type) { case Type.A: string variable = "x"; break; case Type.B: string variable = "y"; break; } 

Однако, согласно 9X_c#-language логике, начальное объявление не должно выполняться, если 9X_switch тип Type.B. Все ли переменные в операторе switch 9X_c-sharp существуют в одной области и создаются / выделяются 9X_switch до обработки какой-либо логики?

145
5

  • @zazkapulsk вы должны сначала объявить переменную, а затем использовать ее в переключателе: `string variable = null; переключатель (Тип) {case Type.A: variable = "x"; ...
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: Объявление переменной в операторе переключения C#

Если вы хотите, чтобы переменная была привязана 9X_visual-c# к конкретному случаю, просто заключите этот 9X_c# случай в отдельный блок:

switch (Type) { case Type.A: { string variable = "x"; /* Do other stuff with variable */ } break; case Type.B: { string variable = "y"; /* Do other stuff with variable */ } break; } 

271
3

  • Это должен быт ...

Ответ #2

Ответ на вопрос: Объявление переменной в операторе переключения C#

Я считаю, что это связано с общей областью 9X_.cs-file действия переменной, это область уровня 9X_switch-statement блока, которая определяется на уровне переключателя.

Лично, если 9X_c#.net вы устанавливаете значение для чего-то внутри 9X_c#-language переключателя в своем примере, чтобы оно 9X_c-sharp действительно приносило какую-либо пользу, вы 9X_c#.net все равно захотите объявить его вне переключателя.

50
2

  • Как человек, пришедший из мира VB, это одна из причин, по которой я ненавижу выражение `switch`. Другие причины включают нео ...

Ответ #3

Ответ на вопрос: Объявление переменной в операторе переключения C#

Да, область применения - это весь блок переключателей 9X_switch-case - к сожалению, IMO. Однако вы всегда можете 9X_c# добавить фигурные скобки в одном регистре, чтобы 9X_c#-language уменьшить область действия. Что касается 9X_c#.net того, созданы ли они / выделены - в кадре 9X_c-sharp стека достаточно места для всех локальных 9X_visual-c# переменных в методе (не говоря уже о сложности 9X_c-sharp захваченных переменных). Это не похоже на 9X_c#-language то, что пространство выделяется во время 9X_csharp выполнения метода.

38
4

  • @Randolpho: Я думаю, что это слишком общее заявление, чтобы делать это. Это может быть просто три или четыре строки, но затрагивающие две или тр ...

Ответ #4

Ответ на вопрос: Объявление переменной в операторе переключения C#

Потому что их область действия находится 9X_c#-language в блоке переключения. В C# Language Specification говорится следующее:

Область 9X_switch действия локальной переменной или константы, объявленной 9X_switch в блоке переключения, - это блок переключения.

13
0