该问题是该问题的附加内容
在C#中,切换条件不能落入其他情况,这会导致编译错误。在这种情况下,我只是在所选月份的月份总数中添加一些数字,此后的每个后续月份中都会添加一些数字。 (简单的示例,并不意味着是真实的)
1 2 3 4 5 6 7 8 9 10 11
| switch (month)
{
case 0:
add something to month totals
case 1:
add something to month totals
case 2:
add something to month totals
default:
break;
} |
在C#中是否有逻辑替代方案,而不必写大量的if语句?
1 2 3 4 5 6 7
| if (month <= 0)
add something to month
if (month <= 1)
add something to month
if (month <= 2)
add something to month
.... etc |
通常,当您看到巨大的switch语句或许多if语句可能会落入多个块的噪音时,您试图抑制不良设计。
相反,如果您实现了规范模式以查看是否匹配,然后对其采取行动,该怎么办?
1 2 3 4 5
| foreach(MonthSpecification spec in this.MonthSpecifications)
{
if(spec.IsSatisfiedBy(month))
spec.Perform(month);
} |
然后您可以添加符合您要执行的操作的不同规格。
很难说出您的域名是什么,所以我的示例可能有些虚构。
在C#switch语句中,只有在没有要通过大小写的情况的语句时,才可以通过大小写进行大小写
1 2 3 4 5 6
| switch(myVar)
{
case 1:
case 2: // Case 1 or 2 get here
break;
} |
但是,如果您想使用一条语句,则必须使用可怕的GOTO
1 2 3 4 5 6 7
| switch(myVar)
{
case 1: // Case 1 statement
goto case 2;
case 2: // Case 1 or 2 get here
break;
} |
您要添加常量吗?如果是这样,也许类似的东西会起作用(C语法):
1 2 3 4
| const int addToTotals[] = {123, 456, ..., 789};
for(i=month;i<12;i++)
totals += addToTotals[i]; |
如果您需要更复杂的语句,而不是在接下来的每个月的总计中添加常量,则可以使用变量或函数指针执行类似的操作。
-亚当
已经有一个解决此主题的问题:
C#switch语句限制-为什么?
编辑:
我要指出的主要目的是,亲爱的野兽,是两个名字几乎完全相同的问题,这给问题集增加了混乱。
以相反的顺序写开关盒
1 2 3 4 5 6 7 8 9 10
| case 2:
case 1:
case 0:
break;
default: |
希望有帮助!