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
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.
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;
}
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With