切换整数优先级的大小写

时间:2015-04-21 17:22:35

标签: c#

这里筋疲力尽的菜鸟。我基本上有2个问题......

很抱歉澄清了这些开关位于一个循环中,它获取了一堆数字,然后使用OrderByDescending()对它们进行排序。我的问题是现在我不知道有哪些数字,我只知道它们是按降序排序的。现在我优先考虑一些特定数字对我来说比其他数字更重要(背后没有规则或逻辑)。但另一方面,我所寻找的数字中没有一个可能在里面,所以作为“默认”的回报或者在集合中有最高数字的工作。

1:是开关案例顺序敏感吗? 假设我打开1到5的范围,对我来说4优先级高于剩下的工作范围?

switch(number)
{
case 4: DoFancyStuff(); break;
case 3: NotTooFancy(); break;
case 1: StillOk(); break;
case 2: Bad(); break;
case 5: SuperBad(); break;
default:break;
}

无论如何,进一步假设数字按降序排序。但我现在不知道number的可能范围,它可能是2,4,8,16等等,但可能缺少一个数字:2,4,16,......

所以如果我不得不说

switch(number)
{
case 32: Nice(); break;
case 64: OkToo(); break;
case 128: Nah(); break;
case 8: OkStillTakeIt(); break;
default: break;
}

因为数字是按降序排列的,所以大数字排在第一位,但它们没有最高优先级,可能有一个数字带有最高(优先级)一(第一种情况),但它也没有。 ..如果不合适我想要拿最高的那个但是“丢失”。

我该如何解决?或者我只是过度思考?错误的做法?我的大脑正在考虑它的爆炸。

4 个答案:

答案 0 :(得分:6)

switch中的所有案例都必须互相排斥,因此确实没有优先权概念。在同一个交换机中,2个案例不可能符合条件。

有关详细信息,请参阅switch (C# Reference)

答案 1 :(得分:0)

没有回答:OP没有寻找范围检查。不删除以阻止其他人回答相同内容。


听起来你期望switch检查值的范围 - 它不会,它只允许检查特定值。

如果你需要检查范围 - 几个if检查是不错的选择:

if (value < 10) {...} // 0-9
else if (value < 100) {...} //10-99
else {...} // 100+

对于更多范围 - 排序的范围列表和二分搜索可能是更好的选项

答案 2 :(得分:0)

switch语句中的顺序完全无关紧要。可以将它们视为if语句,但它们是所有不能重叠的独占案例。同时没有数字可以是1 2,因此如果1输入switch语句,它将始终转到case 1,无论如何在哪里,并忽视任何其他情况。

为了维护起见,我建议您将它们整理好,以便您的案例很容易找到。

答案 3 :(得分:0)

优先级不是一个在switch语句中重要的概念。简短的回答是代码将从上到下工作,依次检查每个案例的值,直到找到一个,或者默认值被命中。

现在说,当你谈论特定价值的频率时,订单通常非常重要。如果您从设计中知道某个案例比其他案例更频繁,那么您可以将该号码作为switch语句中的第一个案例来最小化检查次数。

对于某些情况,编译器可以optimize the switch statement进入一个称为跳转表的常量时间分支,在这种情况下,无论案例的顺序如何都无关紧要。