What does “control falls through a switch statement” mean in this context? Control just moves on to the next statement?
I thought if there is no match and a default case doesn’t exist it will raise an exception. Is it not true?
Means it will be skipped entirely
I see, thank you! I got confused with “control falls through a switch statement” and “C++ style fall through in switch statements”.
C# will let you forget simple things and crash or compile error further down the line.
A switch statement will let control fall through. A switch expression will no, and will throw an exception (and there will also be a compiler warning that it’s not exhaustive before you even run the code)
A switch statement will let control fall through.
I think even switch
statement doesn’t allow it because every case needs to be terminated with either break
, return
or raise
. One needs to use case goto
if one wants fall thought like behavior:
switch (x)
{
case "One":
Console.WriteLine("One");
goto case "Two";
case "Two":
Console.WriteLine("One or two");
break;
}
C# outlaws this, because the vast majority of case sections do not fall through, and when they do in languages that allow it, it’s often a mistake caused by the developer forgetting to write a break statement (or some other statement to break out of the switch). Accidental fall-through is likely to produce unwanted behavior, so C# requires more than the mere omission of a break: if you want fall-through, you must ask for it explicitly.
Programming C# 10 ~ Ian Griffiths
I think even
switch
statement doesn’t allow it […]
A switch
statement allows fall through when the case itself doesn’t have an implementation.
For example this is also considered a fall through:
switch (x)
{
case "One":
case "Two":
Console.WriteLine("One or two");
break;
}