在C#里的switch 一般有下面的要求
1、case 不能贯穿。
2、要写break;
想要这样写是不行的
switch (tmp)
{
case "a ":
case "b ":
Response.Write( "a和b! ");
break;
}
一般呢要这么写
switch (tmp)
{
case "a ": goto case "b ";
case "b ":
Response.Write( "a和b! ");
break;
}
但是今天发现了还可以这么写。
switch (tmp)
{
case "a ":
case "b ":
Response.Write( "a和b! ");
return;
}
在vs2003下编译也通过了。
这种写法 我是通过 Reflector.exe 看我的一个程序的DLL文件发现的。
我在程序里写的是 if else if 的形式,编译器确编译成了 switch 的形式,而且还是可以贯穿case 的。很奇怪,所以发个帖子看看,大家有没有遇到过。是不是我的见识太短了,这种用法本来就是很常见的呢。
------解决方案--------------------------------------------------------
楼主提供的代码和C#的语法并没有矛盾
switch (tmp)
{
case "a ":
case "b ":
Response.Write( "a和b! ");
return;
}
这段代码无论 tmp 是 "a "还是 "b ",都输出 "a和b! " .
以下将 case "a ": 简写为 CA,同样 case "b ": 简写为CB.
CA 的后边没有语句?还是可以认为 CB 是 CA 的语句.
如果在 CA 后边加上一条语句(空语句也行),这些编译就不能通过了.
也就是改成这样就无法通过编译了
switch (tmp)
{
case "a ":
Response.Write( "a ");
case "b ":
Response.Write( "a和b! ");
return;
}