本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
何谓直达?在C(和C++)中,忽略break并且按以下编写代码是完全合法的: nVar = 1 switch ( nVar ) { case 1: DoSomething( ); case 2: DoMore( ); } 在这个例子中,在执行了第一个case语句的代码后,将直接执行到其它case标签的代码,直到一个break语句退出switch语段为止?gt;」苡惺闭馐且桓銮看蟮墓δ?但它更经常地产生难于发现的缺陷. 可如果你想执行其它case标签的代码,那怎么办? 有一种办法,它显示于清单6.3中. 清单 6.3 在swtich语句中使用 goto 标签 和 goto default 1: using System; 2: 3: class SwitchApp 4: { 5: public static void Main( )
6: {
7: Random objRandom = new Random( ); 8: double dRndNumber = objRandom.NextDouble( ); 9: int nRndNumber = ( int )( dRndNumber * 10.0 ); 10: 11: switch ( nRndNumber ) 12: { 13: case 1: 14: 15: break; 16: case 2: 17: goto case 3; 18: case 3: 19: Console.WriteLine( "Handler for 2 and 3" ); 20: break; 21: case 4: 22: goto default; 23: as 24: 25: default: 26: Console.WriteLine( "Random number {0}", nRndNumber ); 27: } 28: } 29: } 在这个例子中,通过Random类产生用于控制表达式的值(第7~9行).switch语段包含两个对switch语句有效的跳转语句. goto case 标签:跳转到所说明的标签 goto default: 跳转到 default 标签 有了这两个跳转语句,你可以创建同C一样的功能,但是,直达不再是自动的.你必须明确地请求它. 不再使用直达功能的更深的含义为:你可任意排列标签,如把default标签放在其它所有标签的前面.为了说明它,我创建了一个例子,故意不结束循环: switch ( nSomething ) { default: case 5: goto default; } 我已经保留了其中一个swich 语句功能的讨论直至结束——事实上你可以使用字符串作为常量表达式.这对于VB程序员,可能听起来不象是什么大的新闻,但来自C或C++的程序员将会喜欢这个新功能. 现在,一个 switch 语句可以如以下所示检查字符串常量了. string strTest = "Chris"; switch ( strTest ) { case "Chris": Console.WriteLine( "Hello Chris!" ); break; }
本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
|