c#switch语句问题

时间:2009-11-25 03:55:21

标签: c# switch-statement magic-numbers

我会切入追逐。我有两个关于开关的问题很简单,但我无法弄明白。

首先:

在c#switch语句中,case语句必须是连续的(带有int)吗?

例如:

switch(someInt)
{
    case 1
    // some code
    case 2
    // some code 
    case 3 
    // some code
}

或是否可以执行以下操作:

switch(someInt)
{
    case 1 
    case 3
    case 5
}

我知道通常if-else语句用于类似的东西,但我只是想知道它是否可能。

另外,在case语句中使用实际数字是否被视为幻数?或者更好的做法是声明常量以便在case语句中使用?

谢谢!

修改

感谢大家的回复!我很感激。

6 个答案:

答案 0 :(得分:1)

它们可以按您想要的任何顺序排列。不,使用实际数字并不总是坏事。但不是魔术数字。如果您要比较int,请使用数字,例如

switch (numberOfItems) 
{  
    case 0:
      break;
    case 1:
      break;
    default:
      break;
}  

(当然,这只是一个例子,我无法想象在现实世界中看到这段代码)

答案 1 :(得分:0)

他们不必是连续的。虽然我这样做只是为了清楚起见。

答案 2 :(得分:0)

顺序无关紧要,编译器会为您完成这项工作。

我更喜欢使用枚举或const int来为数字提供含义,特别是当它被其他人维护时。

答案 3 :(得分:0)

case语句的值绝对不需要是连续的。

您也不仅仅使用整数值。字符串也可以正常工作。

如果您担心魔术数字,最好的办法是创建一个枚举。它将传达那些神奇数字的含义。否则,请享受吧。

答案 4 :(得分:0)

这两种方式都可以。语法是这样的:(你很接近)

switch(someInt)
{
    case 1:
    // some code
    break;

    case 2:
    // some code 
    break;

    case 3:
    // some code
    break;

    default:
    // code for "else" case
    break;
}
or is it possible to do something like the following:

switch(someInt)
{
    case 1:
    case 3:
    case 5:
    // some code
    break;
} 

注意冒号和break s。

至于幻数的使用,一般来说,我更喜欢将文字放在常量中,但我为明显的数字做了例外,例如检查因子可分性的最小数字是2.

答案 5 :(得分:0)

作为小型优化,您可以根据实际/预期频率订购案例值。我还会添加一个“默认”案例,这样您就可以轻松发现自己使用枚举的位置,并忘记对其进行说明。这是使用枚举值而不是常量的另一个原因。