0

我会切入正题。我有两个关于 switch 的简单问题,但我无法弄清楚。

第一的:

在 c# switch 语句中,case 语句是否必须是连续的(带整数)?

例如:

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 语句中使用?

谢谢!

编辑:

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

4

6 回答 6

1

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

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

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

于 2009-11-25T03:58:32.410 回答
0

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

于 2009-11-25T03:57:32.960 回答
0

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

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

于 2009-11-25T03:58:35.623 回答
0

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

您也不仅仅局限于使用整数值。字符串也同样有效。

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

于 2009-11-25T03:59:00.867 回答
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;
} 

注意冒号和breaks。

至于幻数的使用,一般来说,我更喜欢将文字放在常量中,但我对明显的数字例外,例如检查因数可除性的最低数字是 2。

于 2009-11-25T03:59:30.240 回答
0

作为一个小的优化,您可以根据实际/预期频率对您的案例值进行排序。我还会添加一个“默认”案例,这样您就可以轻松地发现您在哪里使用了您的枚举并且忘记了对其进行说明。这是在常量上使用枚举值的另一个原因。

于 2009-11-25T04:03:22.353 回答