Yan Cui
I help clients go faster for less using serverless technologies.
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 }
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Pingback: Populate Dropdown Using Enum (Asp.Net MVC) - Ankit Kedia
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.