Switch-Case不能这样工作吗?

mit*_*221 -2 c# compiler-errors

我正在尝试将JavaScript开关转换为C#.

我收到了错误 Error 3 Cannot implicitly convert type 'bool' to 'int'

        switch (numero)
        {
            case (numero > -1 && numero < 16):
                rtn = list1[numero] + " " + str2;
                if (primerDigito != 1)
                {
                    rtn += "s";
                }
                break;
            case (numero > 15 && numero < 30):
                if (numero != 20)
                {
                    rtn = list2[primerDigito] + list1[segundoDigito];
                }
                else
                {
                    rtn = "veinte";
                }
                rtn += " " + str2 + "s";
                break;
            case (numero > 29 && numero < 100):
                rtn = list2[primerDigito] + "nta";
                if (segundoDigito != 0)
                {
                    rtn += " y " + list1[segundoDigito];
                }
                rtn += " " + str2 + "s";
                break;
            case 100:
                rtn = "cien " + str2 + "s";
                break;
            default:
                rtn = "número invalido";
        }
Run Code Online (Sandbox Code Playgroud)

有没有解决这个问题?

注意:我真的必须使用switch-case(而不是if-elses)

eou*_*3hf 13

你不能这样做:一个switch语句只能使用单个值,而不能使用cases的范围.

你需要一个if/ else树.形式的东西:

if(numero > -1 && numero < 16) {
 rtn = list1[numero] + " " + str2;
 if (primerDigito != 1)
 {
  rtn += "s";
 }
} else if(numero > 15 && numero < 30) {
 // logic in second block
} else if...
Run Code Online (Sandbox Code Playgroud)

请注意,如果你绝对,完全致力于使用a switch,你将不得不列举所有的情况(但这是一个如此严重的软件工程罪,我甚至不相信我写出来 - 不要这样做,它只是一个关于switch语句如何工作的例子):

switch(numero)
{
 case 0:
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 case 6:
 case 7:
 case 8:
 case 9:
 case 10:
 case 11:
 case 12:
 case 13:
 case 14:
 case 15:
  rtn = list1[numero] + " " + str2;
  if (primerDigito != 1)
  {
   rtn += "s";
  }
  break;
 case 16:
 ...
 case 28:
 case 29:
  // second logic block
  break;
 ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在代码库中看到这一点,我会感到困惑和愤怒.

  • +1这实际上是如何解决问题的.OP很坚持它是`switch`而不是奇怪. (3认同)