有人知道在switch语句中是否能包含一个范围吗?如果可以,怎么做呢?
比如:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
编译器似乎不喜欢这种语法 - 它也不喜欢这个:case <= 8:
有人知道在switch语句中是否能包含一个范围吗?如果可以,怎么做呢?
比如:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
编译器似乎不喜欢这种语法 - 它也不喜欢这个:case <= 8:
switch (x)
{
case 1:
//do something
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
//do something else
break;
default:
break;
}
与 if {}
语句结合使用:
switch (x)
{
case 1:
//do something
break;
default:
if (x <= 8)
{
// do something
}
else
{
// throw exception
}
break;
}
// do something else
的部分。switch (x)
{
case 1:
//do something
break;
case 2: case 3: case 4: case 5: case 6: case 7: case 8:
//do something else
break;
default:
break;
}
虽然当我最初提出这个问题时这是不可能的,但通过 C# 模式匹配的奇迹,现在可以实现了(在 C# 7 中):
switch (i)
{
case var test when test <= 2:
Console.WriteLine("Less than 2");
break;
case var test when test > 2 && test < 10:
Console.WriteLine("Between 2 and 10");
break;
case var test when test >= 10:
Console.WriteLine("10 or more");
break;
}
关于该主题的博客文章
一种可能性是将您的范围转换为整数。例如:
//assuming x>=9 or if (x <= 0) return;
switch((x+12)/7)
{ case 1:Console.WriteLine("one");
break;
case 2:Console.WriteLine("2 through 8 inclusive");
break;
case 3:Console.WriteLine("9 through 15 inclusive");
break;
default: Console.WriteLine("16 or more");
break;
}
简短回答: 不行。虽然可以将所有情况都写出来,但是这样的范围表示法是不被支持的。
我认为你需要在这里使用if
语句或切换到一个更好支持情况区分的语言。
if
。你可以逐个处理显式的情况,如果只有一个范围,则在默认情况下处理它。
你可以做到
case 2:
case 3:
case 4:
...
case 8:
// code here
break
你可以使用 case 穿透:
switch (x)
{
case 1:
//do something
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
//do something else
break;
default:
break;
}
但我只会在这里使用它。
在switch case中不能使用任何条件语句。
如果您想要为不同的选项执行相同的代码行,则可以采取以下措施:
switch (i)
{
case 0:
case 1:
case 2:
case 3:
//do something here.
break;
default:
//do something here.
break;
}
switch
的MSDN条目明确说明编译器不允许“穿透”。或者我有什么地方理解错误吗? - Informagiccase
是允许的。 - Informagic