这里筋疲力尽的菜鸟。我基本上有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;
}
因为数字是按降序排列的,所以大数字排在第一位,但它们没有最高优先级,可能有一个数字带有最高(优先级)一(第一种情况),但它也没有。 ..如果不合适我想要拿最高的那个但是“丢失”。
我该如何解决?或者我只是过度思考?错误的做法?我的大脑正在考虑它的爆炸。
答案 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进入一个称为跳转表的常量时间分支,在这种情况下,无论案例的顺序如何都无关紧要。