切换声明在C#中落后?切换声明是我喜爱switch与if/else if构造的个人主要原因之一。这里有一个例子:static string NumberToWords(int number){
string[] numbers = new string[]
{ "", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine" };
string[] tens = new string[]
{ "", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety" };
string[] teens = new string[]
{ "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen" };
string ans = "";
switch (number.ToString().Length)
{
case 3:
ans += string.Format("{0} hundred and ", numbers[number / 100]);
case 2:
int t = (number / 10) % 10;
if (t == 1)
{
ans += teens[number % 10];
break;
}
else if (t > 1)
ans += string.Format("{0}-", tens[t]);
case 1:
int o = number % 10;
ans += numbers[o];
break;
default:
throw new ArgumentException("number");
}
return ans;}聪明的人正在畏缩,因为string[]s应该在函数之外声明:嗯,他们是,这只是一个例子。编译器失败并出现以下错误:控制不能从一个案例标签('案例3:')落到另一个案例标签
控制不能从一个案例标签('案例2:')落到另一个案例标签为什么?有没有办法在没有三个ifs的情况下获得这种行为?
3 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
通过下降switch
- case
S可通过不具有代码在一个来实现case
(见case 0
),或者使用特殊的goto case
(见case 1
)或goto default
(见case 2
)形式:
switch (/*...*/) { case 0: // shares the exact same code as case 1 case 1: // do something goto case 2; case 2: // do something else goto default; default: // do something entirely different break;}
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
交换机漏洞历史上是现代软件中错误的主要来源之一。语言设计者决定强制要求在案例结束时跳转,除非您在没有处理的情况下直接默认为下一个案例。
switch(value){ case 1:// this is still legal case 2:}
- 3 回答
- 0 关注
- 366 浏览
添加回答
举报
0/150
提交
取消