C# switch: case not falling through to other cases limitation
Solution 1
Often times when you see the noise from a huge switch statement or many if statements that might fall into more than one block, you're trying to suppress a bad design.
Instead, what if you implemented the Specification pattern to see if something matched, and then act on it?
foreach(MonthSpecification spec in this.MonthSpecifications)
{
if(spec.IsSatisfiedBy(month))
spec.Perform(month);
}
then you can just add up different specs that match what you're trying to do.
It's hard to tell what your domain is, so my example might be a little contrived.
Solution 2
In C# switch statements you can fall through cases only if there is no statement for the case you want to fall through
switch(myVar)
{
case 1:
case 2: // Case 1 or 2 get here
break;
}
However if you want to fall through with a statement you must use the dreaded GOTO
switch(myVar)
{
case 1: // Case 1 statement
goto case 2;
case 2: // Case 1 or 2 get here
break;
}
Solution 3
Are you adding constants? If so, maybe something like this would work(C syntax):
const int addToTotals[] = {123, 456, ..., 789};
for(i=month;i<12;i++)
totals += addToTotals[i];
You can do a similar thing with variable or function pointers if you need more complex statements than add constant to totals for each month following.
-Adam
Solution 4
There is already a question addressing this topic:
C# switch statement limitations - why?
EDIT:
My main purpose in pointing that out, gentlebeasts, is that two questions of near-identical name add confusion to the pool of questions.
Related videos on Youtube
Mike Fielden
On a continuous journey to be the best father, husband and web developer I can be. Always be learnin -Mike Fielden Jr.
Updated on April 16, 2022Comments
-
Mike Fielden about 2 years
This question is kind of an add-on to this question
In C#, a switch case cannot fall through to other cases, this causes a compilation error. In this case I am just adding some number to the month total for the selected month and each subsequent month thereafter. (simple example, not meant to be real)
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; }
Is there a logical alternative to this in C# without having to write out a ton of if statements?
if (month <= 0) add something to month if (month <= 1) add something to month if (month <= 2) add something to month .... etc
-
Sudoer over 15 yearsI don't see the relation (apart from the title). Question 44905 is about the origins of certain limitations. This question is about how to overcome one specific limitation (that isn't even mentioned in the other question).
-
Sudoer over 15 yearsIf you want to point out that there is a problem with the title, then perhaps you shouldn't add a tag
duplicate
but either change the title or explicitly mention that you think there is a problem it. -
Ben Voigt about 14 yearsC# still requires a flow-control statement (break/continue/return/goto/goto case/throw) between cases if any other code is present.