繁体   English   中英

C#开关语句问题

[英]c# switch statement question

我会追逐。 关于开关,我有两个简单的问题,但我无法弄清楚。

第一:

在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语句中使用的常量?

谢谢!

编辑:

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

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

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

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

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

顺序无关紧要,编译器将为您完成该工作。

我更喜欢使用枚举或const int来提供数字的含义,尤其是当其他人正在维护它时。

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

您也不必仅使用整数值。 字符串也一样。

如果您担心魔术数字,最好的选择是创建一个枚举。 它将传达那些魔术数字的含义。 否则,享受它并享受。

两者都有可能。 语法是这样的:(您很接近)

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秒。

至于魔术数字的使用,通常,我更喜欢将常量放在常量中,但是对于明显的数字(例如检查因子除数的最低数字为2),我例外。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM