switch语句下的变量声明和定义

switch语句下的变量声明和定义的问题:

switch...case...语句中存在声明和定义会出现一些问题。这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般的if else语句,我们知道swich的case语句可以这样写:

switch (i)
{
case 1:
case 2:
int n = 0;
break;
case 3:
break;
default:
break;
}

所以整个switch语句处在同一个代码块中,只不过有多个case语句,既然多个case在同一个代码块中,那么int n = 0;的语句就是块中局部变量,我们知道变量在编译器中编译时,是从它的定义点开始有效的,也就是说int n=0;在整个代码块中都是可见的,但又个问题这里switch语句,编译器在编译的时候有可能跳过case 2中的int n=0;定义,所以编译器才报错,当然解决这个语法错误有3种方法:

解决方法:

(1)case中加括号,明确声明变量的域。

switch (i)
{
case 1:
case 2:
{
int n = 0;
}
break;
default:
break;
}

(2)变量只声明不定义,只有使用的时候才去定义。

switch (i)
{
case 1:
case 2:
int n;
n = 0;
break;
default:
break;
}

(3)变量的定义放到switch的外边。

int n = 0;
switch (i)
{
case 1:
case 2:
break;
default:
break;
}
上一篇:Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)


下一篇:透过IL看C#:switch语句(转)