.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
}
Liked this article? Support me on Patreon and get direct help from me via a private Slack channel or 1-2-1 mentoring.
Subscribe to my newsletter


Hi, I’m Yan. I’m an AWS Serverless Hero and the author of Production-Ready Serverless.

I specialise in rapidly transitioning teams to serverless and building production-ready services on AWS.

Are you struggling with serverless or need guidance on best practices? Do you want someone to review your architecture and help you avoid costly mistakes down the line? Whatever the case, I’m here to help.

Hire me.


Check out my new course, Complete Guide to AWS Step Functions. In this course, we’ll cover everything you need to know to use AWS Step Functions service effectively. Including basic concepts, HTTP and event triggers, activities, callbacks, nested workflows, design patterns and best practices.

Get Your Copy