.Net Tips – marking the default enum value ‘Undefined’

enum is a tremendously useful structure in C#, but when defining a new enum there is one thing you should always ask yourself:

What should the default value be for my enum?

The problem with default value is that enum is really an int underneath, and as do all integers in C# an enum has a default value of 0 when first created. So if 0 is not mapped to an enumeration constant then your enum will be instantiated with an invalid valid:

public enum MyColour
{
    Red = 1,
    Green = 2,
    Blue = 3
}

MyColour colour = new MyColour(); // colour = 0, which is not a valid MyColour enumeration

Alternatively, if you don’t specify the integer values for the enumerations the enumeration by default will start at 0, and a new enum will be instantiated with the first value in the list. Again, there’s the problem with the default value because most of the time there is no obvious candidates for the default value and it doesn’t make sense to just pick an arbitrary enumeration to be the default value:

public enum MyColour
{
    Red,    // 0
    Green, // 1
    Blue    // 2
}

MyColour colour = new MyColour(); // colour = MyColour.Red, but should a new colour default to red??

This can lead to subtle bugs, and are often hard to pick up on. Take for example a class that uses the MyColour enum, if the programmer who wrote the class forget to set the value of the enum it’ll simply read MyColour.Red, which is a valid case and without tracing through the code it’s difficult to know whether the enum had been set to MyColour.Red purposefully.

Therefore it’s always better to mark the default value of an enum with some special enumeration such as None, or Undefined, etc.:

public enum MyColour
{
    Undefined = 0,
    Red = 1,
    Green = 2,
    Blue = 3
}
  • Pingback: Populate Dropdown Using Enum (Asp.Net MVC) - Ankit Kedia()

  • http://darrellewis.weebly.com/ Lucius Frazier

    The platform was built from a scratch to overcome many of the problems that commonly accustomed with application development i.e. time consuming development process.