Introduction
Enum is a strongly typed constant and keyword defined for the Enumeration new data type. A Typesafe enumeration provides an efficient way to define a set of named integral constants that may be assigned to a variable. Using enums makes the code more readable and less prone to errors. Enums are useful to developers when you have a set of values that are functionally significant and unchanged. The main advantage of Enums is to make it easy to change values in the future. Enums are a robust alternative to the simple String or Int constants used in much older APIs to represent sets of related items.
Using Enums in C#
Enums written by developers are used to create numeric constants in the .NET framework. All members of the enum must be assigned a numeric value. Following are the key points about Enums:
- Keyword Enums create enumerated data types in C#
- Enums are for developers
- As mentioned above, Enums are strongly typed constants
- An enum of one type can’t be implicitly assigned to another enum type
- Enumerations make code much more readable, reusable, and understandable
- Enum values are fixed
- The default enum type is int
- Every enum type automatically derives from System.Enum
- Enums are value types and are created on the stack, not on the heap
C# Enum is an abstract class; it has static helper methods to work with. Following is the list of helper methods:
- Format: This function converts the specified value of enum type to the specified string format
- GetName: This function returns the name of the constant or value of the specified enum type
- GetNames: It returns an array of string name of all the constant of the specified enum
- GetValues: An array of the values of all the constants of the specified enum
- Parse: The function converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object
- TryParse: Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object
In the following C# program, I have created two Enum types, named DefectPrioriy and DefectSeverity. Both DefectPrioriy and DefectSeverity enumerations have four values. In the main program, I have printed values and names of both the enumerations using the console.write and console.writeline functions.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace EnumProject { enum DefectPrioriy { Immediate = 1, High, Medium, Low } enum DefectSeverity { Critical = 1, Major, Minor, Low } class Program { static void Main(string[] args) { Console.Write("Defect Prioriy: "); Console.WriteLine((int)DefectPrioriy.Immediate); Console.Write("Defect Severity: "); Console.WriteLine((int)DefectSeverity.Minor); string sDefectPrioriy = Enum.GetName(typeof (DefectPrioriy), 4); Console.WriteLine(sDefectPrioriy); Console.WriteLine("The values of the DefectPrioriy Enum are:"); foreach (int i in Enum.GetValues(typeof(DefectPrioriy))) Console.WriteLine(i); Console.WriteLine("The names of the DefectPrioriy Enum are:"); foreach (string str in Enum.GetNames(typeof (DefectPrioriy))) Console.WriteLine(str); PrintEnumWithoutLoop(); DisplayEnumSwitchCase(); Console.Read(); } } }
The following two functions, PrintEnumWithoutLoop and DisplayEnumSwitchCase, are called from the main method to display a defect priority inside a switch case and without a loop.
static void PrintEnumWithoutLoop () { Console.WriteLine("Defect Prioriy {0} {1}", (int)DefectPrioriy.Immediate, DefectPrioriy.Immediate); Console.WriteLine("Defect Prioriy {0} {1}", (int)DefectPrioriy.High, DefectPrioriy.High); Console.WriteLine("Defect Prioriy {0} {1}", (int)DefectPrioriy.Medium, DefectPrioriy.Medium); Console.WriteLine("Defect Prioriy {0} {1}", (int)DefectPrioriy.Low, DefectPrioriy.Low); Console.ReadLine(); }
static void DisplayEnumSwitchCase() { DefectPrioriy value = DefectPrioriy.Medium; switch (value) { case DefectPrioriy.Immediate: Console.WriteLine("Defect Priority Immediate"); break; case DefectPrioriy.High: Console.WriteLine("Defect Priority High"); break; case DefectPrioriy.Medium: Console.WriteLine("Defect Priority Medium"); break; case DefectPrioriy.Low: Console.WriteLine("Defect Priority Low"); break; } }
Conclusion
I hope this article has helped you understand enums, and their usage in C# and .NET applications. Please provide your valuable feedback for improvement. That’s all for today; happy reading!