Reputation: 7489
I'm using a switch/case statement to handle some updates for a deployed application. Basically, I want to waterfall through the cases to perform the update from the current running version to the newest version.
From Visual Studio yelling at me, I learned that C# does not allow falling through to the next case (exactly what I'm trying to do). From this question, I learned how to do what I want to do. However, it is still apparently an error.
What I've got is
switch (myCurrentVersion)
{
case null:
case "":
case "0":
UpdateToV1();
goto case "1";
case "1":
UpdateToV2();
}
I'm getting the following error on the line case "1":
:
Error 1 Control cannot fall through from one case label ('case "1":') to another
Am I doing something wrong? How can I force it to fall through?
Upvotes: 15
Views: 11818
Reputation: 659964
This is a great example of how a poorly worded error message creates confusion. The rule of C# that is actually violated here is not that control has fallen through from one switch section to another; it is that the end point of every switch section must not be reachable. The error, by rights, should have been something like
Endpoint of switch section for case "1" must not be reachable; consider adding 'break;'
When we revisit the semantic analysis of switch statements for the Roslyn project I'll see if we can change the wording on this a bit to be more clear.
For more analysis of this and related issues, see my article on the subject.
Upvotes: 28
Reputation: 837996
You need to add a break
statement even if it's the last case:
switch (myCurrentVersion)
{
case null:
case "":
case "0":
UpdateToV1();
goto case "1";
case "1":
UpdateToV2();
break;
}
Upvotes: 33
Reputation: 3972
put a break;
after UpdateToV2();
Couldnt you get rid of the goto case "1"
as it will fall through to that anyway?
Upvotes: 4