我会切入追逐。我有两个关于开关的问题很简单,但我无法弄明白。
首先:
在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语句中使用?
谢谢!
修改
感谢大家的回复!我很感激。
答案 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)
作为小型优化,您可以根据实际/预期频率订购案例值。我还会添加一个“默认”案例,这样您就可以轻松发现自己使用枚举的位置,并忘记对其进行说明。这是使用枚举值而不是常量的另一个原因。