当前位置: 代码迷 >> ASP.NET >> switch 的这种用法你见过吗?小弟我还是头一回见到
  详细解决方案

switch 的这种用法你见过吗?小弟我还是头一回见到

热度:10744   发布时间:2013-02-25 00:00:00.0
switch 的这种用法你见过吗?我还是头一回见到。
在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;
}
  相关解决方案