We all have heard time and again that the default case fall through is not good (as in C/C++) and C# does not allow it. There has been enough debate on this but I still differ on this. I used to like it a lot and somehow when I do need to use it the following puts me off big time!!!

switch(value)

{

case 0:

Console.WriteLine("In case 0\n");

goto case 1;

case 1:

Console.WriteLine("In case 1\n");

goto case 2;

case 2:

Console.WriteLine("In case 2\n");

break;

}

I kind of do not buy the statement that case-statement fall through results in issues in the maintainence phase. Its pointed out that fall-through can lead to the following

  1. Developer forgets to add the break at the end and un-intentional fall-through may happen
  2. Case statements cannot be easily reordered as the fall-through execution may vary...

With C lying around for 30 years and C++ over 20 years most developers have got used to adding break at the end of case. In case C# wanted to do something for new developers or for developers moving in from languages like VB, a warning could have been added in case break is missing, asking the developer if fall-through is the intent. This is very similiar to the warning given for the following code

bool hello;

// lots of code....

if (hello = true) // this is why some people use true == hello

   Console.WriteLine(arg);

Warning 1 Assignment in conditional expression is always constant; did you mean to use == instead of = ?

What I also do not understand is the requirement for the break statement at the end of each case in C# even though it does not support fall-through.

switch (arg)

{

case "0":

Console.WriteLine(0);

//break;

case "1":

Console.WriteLine(1);

break;

}

The above code fails to compile and you need to uncomment the //break to get it to compile. The error is "Control cannot fall through from one case label ('case "0":') to another" Since the language clearly states that fall-through do not happen then why do I need to add the extra break, it has no purpose and I should not be required to add it. This looks like to have been added to aid C/C++ developers to understand that fall through does not happen. I feel that this error should have been the warning I had mentioned above....

There are a lot of interesting or weird uses of fall-through and the fact that switch can be interlaced with statement blocks (thats in the next post...).