Table of Contents
- 1 What is an enum in C#?
- 2 Advantages to using enums in C#
- 3 Syntax
- 4 Define Enum in C#
- 5 C# Enum in Switch Statement
- 6 Define Enum Inside a Class
- 7 Enum Values
- 8 How to access an Enum item?
- 9 Enum methods in C#
- 10 Why and when should you use Enums in C#?
- 11 How to Parse a string to Enum in C#
- 12 How to Convert an Enum to string in C#?
- 13 C# Enum in a Switch Statement
What is an enum in C#?
An enum, or enumeration, is a value type in C# that consists of a set of named constants called the members of the enum. Enums are useful when you have a fixed set of values that a variable can take on, such as the days of the week or a set of predefined options.
Enums are value types, so they are stored in the stack rather than the heap. This means that they are faster to access than reference types, but they also take up more memory.
In this post, we will learn the proper usage of an enum in c# with multiple examples.
Advantages to using enums in C#
There are several advantages to using enums in C#:
- Enums can make your code more readable and easier to understand. By giving meaningful names to a set of predefined values, you can make it clearer what the values represent and how they should be used.
- Enums can help prevent errors. By limiting the values that a variable can take on to a predefined set, you can ensure that only valid values are used. This can help prevent issues caused by using invalid or unexpected values.
- Enums can improve the performance of your code. Because they are value types, enums are stored in the stack rather than the heap, which means they are faster to access than reference types.
- Enums can make your code more maintainable. By using enums, you can centralize the definitions of your predefined values in a single location, which makes it easier to make changes or add new values in the future.
- Enums can be used in switch statements. Because enums have a fixed set of values, you can use them in a switch statement to create more efficient code that is easier to read and maintain.
- Enums can be declared inside or outside the class and struct.
- The Flags property allows us to assign multiple values to enum objects using bitwise operators.
Overall, enums are a useful feature in C# that can help improve the readability, maintainability, and performance of your code.
Syntax
The following is the syntax for defining an enum in C#.
enum <Enum_Name>
{
// Enumeration list
};
Define Enum in C#
The enum keyword is used to declare new enumeration types in C#. Here is an example of how you can define an enum in C#:
public enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
In the above example, the DaysOfWeek
enum has seven members: Monday
, Tuesday
, Wednesday
, Thursday
, Friday
, Saturday
, and Sunday
. These members are assigned default values of 0, 1, 2, 3, 4, 5, and 6, respectively. However, you can also specify custom values for the members of an enum:
Example:
public enum Season
{
Winter = 1,
Spring = 2,
Summer = 3,
Fall = 4
}
In the above code example, the Season
enum has four members: Winter
, Spring
, Summer
, and Fall
. These members are assigned values of 1, 2, 3, and 4, respectively.
Once you have defined an enum, you can use it in your code like this:
DaysOfWeek today = DaysOfWeek.Monday;
Season currentSeason = Season.Spring;
C# Enum in Switch Statement
You can also use an enum in a switch statement:
switch (today)
{
case DaysOfWeek.Monday:
Console.WriteLine("It's Monday!");
break;
case DaysOfWeek.Tuesday:
Console.WriteLine("It's Tuesday!");
break;
// and so on..
}
Define Enum Inside a Class
Enums defined within a class are only visible and accessible within the class and its nested types. They are not accessible from outside the class.
To define an enum inside a class in C#, you can use the following syntax:
public class MyClass
{
public enum MyEnum
{
Value1,
Value2,
Value3
}
}
You can then use the enum within the class like this:
MyClass.MyEnum enumValue = MyClass.MyEnum.Value2;
Enum Values
An enum value is a named constant that is a member of an enumeration. Enum values are used to represent a set of predefined options or states.
In C#, you can define an enum like this:
public enum MyEnum
{
Value1,
Value2,
Value3
}
This enum has three values: Value1
, Value2
, and Value3
. By default, these values are assigned integer values starting at 0 and incrementing by 1 for each subsequent value. So in this example, Value1
would have a value of 0, Value2
would have a value of 1, and Value3
would have a value of 2.
You can also specify custom values for the enum values:
public enum MyEnum
{
Value1 = 10,
Value2 = 20,
Value3 = 30
}
In the above code example, Value1
would have a value of 10, Value2
would have a value of 20, and Value3
would have a value of 30.
You can use an enum value in your code like this:
MyEnum myValue = MyEnum.Value3;
Let’s use an enum value in a switch statement:
switch (myValue)
{
case MyEnum.Value1:
Console.WriteLine("Value1");
break;
case MyEnum.Value2:
Console.WriteLine("Value2");
break;
case MyEnum.Value3:
Console.WriteLine("Value3");
break;
}
Enum values are useful when you have a fixed set of options or states that a variable can hold, and you want to give those options meaningful names. They can make your code easier to read and understand, and can also help prevent errors by ensuring that only valid values are used.
How to access an Enum item?
You can use dot (.)
syntax to access enumerations: enum.member
using System;
namespace EnumExample
{
class Program
{
// Declaring an enum inside a class
public enum WorkingDays
{
Monday, // 0
Tuesday, // 1
Wednesday, // 2
Thursday, // 3
Friday // 4
}
static void Main(string[] args)
{
// Accessing enum item using dot (.) operator
WorkingDays workingDays = WorkingDays.Monday;
Console.WriteLine($"WorkingDay : {workingDays}");
Console.ReadKey();
}
}
}
// Output:
//WorkingDay : Monday
Enum methods in C#
There are several methods that are available for working with enums in C#. These are just a list of a few of the methods that are available for working with enums in C#. Enums are a powerful and useful feature of the language, and these methods provide a convenient way to work with them in your code.
01. Enum.GetValues()
: This method returns an array of all the values in an enum.
using System;
namespace EnumExample
{
public enum MyEnum
{
Value1,
Value2,
Value3
}
public class program
{
public static void Main()
{
// Getting values
MyEnum[] values = (MyEnum[])Enum.GetValues(typeof(MyEnum));
// Printing enum values
foreach(var item in values)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
02. Enum.GetNames()
: This method returns an array of strings containing the names of all the values in an enum.
string[] names = Enum.GetNames(typeof(MyEnum));
03. Enum.Parse()
: This method converts a string to an enum value.
MyEnum myValue = (MyEnum)Enum.Parse(typeof(MyEnum), "Value2");
04. Enum.ToObject()
: This method converts an integer to an enum value.
MyEnum myValue = (MyEnum)Enum.ToObject(typeof(MyEnum), 1);
05. Enum.GetUnderlyingType()
: This method returns the underlying type of an enum (i.e., the type of the values in the enum).
Type underlyingType = Enum.GetUnderlyingType(typeof(MyEnum));
How to convert an enum to an array or List in C#?
Let’s take a look at the following working example to convert an enum to an array and List.
using System;
using System.Collections.Generic;
using System.Linq;
namespace EnumExample
{
class Program
{ // Declared an enum inside a class
public enum Months
{
January,
February,
March,
April,
May,
June,
July
}
static void Main(string[] args)
{
// Example 1: Get array of enum constants
Console.WriteLine("**** Get array of enum constants using Enum.GetValues method ****");
Months[] months = (Months[])Enum.GetValues(typeof(Months));
Console.WriteLine(string.Join(Environment.NewLine,months));
Console.WriteLine("**** Get List of enum constants using LINQ ****");
// Example 2: Get List of enum constants using LINQ
List <Months> monthList = Enum.GetValues(typeof(Months))
.Cast<Months>()
.ToList();
Console.WriteLine(string.Join(Environment.NewLine, monthList));
Console.ReadKey();
}
}
}
Once you run the above program, the following result will be printed.
Why and when should you use Enums in C#?
When we have a set of values that will not change throughout the application, we can use enumerations, such as days of the week, months, seasons, colors, deck of card, gender, time zones, temperature conversion ratios, etc.
How to Parse a string to Enum in C#
To convert string to enum we can simply use the static method Enum.Parse . The first parameter of this method is an enum type, the second parameter is a string type, and the third parameter takes a boolean value which is optionally used to ignore the case.
Let’s look at the following working example to understand.
using System;
namespace EnumExample
{
class Program
{ // Declared an enum inside a class
enum Season
{
Spring = 1,
Summer = 2,
Autumn = 3,
Winter = 4
}
static void Main(string[] args)
{ // String value
string winter = "Winter";
//Convert string to enum
Season season = (Season)Enum.Parse( typeof(Season), winter,true);
if(season is Season.Winter)
{
Console.WriteLine($"Season : {season}");
}
Console.ReadKey();
}
}
}
// Output:
//Season : Winter
How to Convert an Enum to string in C#?
To convert an enum to a string, we can simply use ToString() method.
Let’s look at the following working example to understand.
static void Main(string[] args)
{
//Get enum
Season season = Season.Summer;
//Example 1: Convert enum to string value
string summer = season.ToString();
Console.WriteLine($"Season : {summer}");
//Example 2: Convert enum to string value
Console.WriteLine($"Season : {Season.Winter.ToString()}");
Console.ReadKey();
}
// Output:
// Season : Summer
// Season : Winter
Get enum by the number value
The Enum.GetName method is used to get the name of an enum value. Let’s look into the following code snippet to get the name of the 2nd element of the “Season” enum.
static void Main(string[] args)
{
// Get name of 2nd value in Season enum
string season = Enum.GetName(typeof(Season), 2);
Console.WriteLine($"Season: {season}");
Console.ReadKey();
}
// Output:
// Season: Summer
Flag Attribute in C# Enums
The Flags attribute in enum is used to represent a collection of possible values, rather than a single value.
We can use the [Flag] attribute when we want to set multiple values to an enum. Such collections are often used with the switch & bitwise (OR |) operators, for example.
using System;
namespace EnumExample
{
// Using Flag Attribute in enum
[Flags]
enum Colors
{
//We must use powers of two for bitwise operations to work
Red = 1,
Green = 2,
Blue = 4,
Yellow = 8
};
class Program
{
static void Main(string[] args)
{
// Using bitwise ( OR | ) operator.
Colors allowedColors = Colors.Blue | Colors.Red;
string[] colors = Enum.GetNames(typeof(Colors));
foreach (var name in colors)
{
var color = (Colors)Enum.Parse(typeof(Colors), name);
if (allowedColors.HasFlag(color))
Console.WriteLine($"{color} Color is allowed.");
else
Console.WriteLine($"{color} Color is not allowed.");
}
Console.ReadKey();
}
}
}
Check if a string value is defined in an Enum
By using Enum.IsDefined method, We can check if a given string named constant or an integral value exists in a specified enum.
class Program
{
static void Main(string[] args)
{
//check if integral value exists in an existing enum
Console.WriteLine(Enum.IsDefined(typeof(Colors), 0));
//check if string named constant exists in an existing enum
Console.WriteLine(Enum.IsDefined(typeof(Colors), "Blue"));
Console.ReadKey();
}
}
// Output:
// False
// True
C# Enum in a Switch Statement
In C #, enums are commonly used in switch statements to verify the corresponding values:
The following is an example to use an enum in a switch statement.
using System;
namespace EnumInSwitchStatement
{
public enum Operator
{
// List of operators
PLUS,
MINUS,
MULTIPLY,
DIVIDE
}
public class Program
{
public double Calculate(int leftValue, int rightValue, Operator op)
{
switch (op)
{
case Operator.PLUS: return leftValue + rightValue;
case Operator.MINUS: return leftValue - rightValue;
case Operator.MULTIPLY: return leftValue * rightValue;
case Operator.DIVIDE: return leftValue / rightValue;
default: return 0.0;
}
}
public static void Main()
{
Console.WriteLine("** Example - Enum inside a switch statement in C# ** \n");
Program program = new Program();
Console.WriteLine($"The sum of 10 + 10 is { program.Calculate(10, 10, Operator.PLUS)}");
Console.ReadKey();
}
}
}
Q: Why is an enum used in C#?
Enums are used in C# to represent a set of predefined values or states. They can make your code more readable and maintainable by giving meaningful names to a fixed set of values, and they can help prevent errors by ensuring that only valid values are used. Enums can also improve the performance of your code by being stored in the stack rather than the heap. Overall, enums are a useful feature of C# that can help improve the readability, maintainability, and performance of your code.
Q: Can an enum be null in C#?
Ans: Enum types cannot contain null values.
Q: Can an enum be static in C#?
Ans: An enum can’t be static in C#.
Q: Are enums in C# immutable?
Ans: Enum values are intended to be immutable and typically describe the type or status of something, so they don’t frequently change what they mean.
Q: How do you use enums?
Ans: When a variable (particularly a method parameter) can only accept one value out of a limited set of options, you should always use enums.
Examples would be things like type constants (Directions: “NORTH”, “SOUTH”, “EAST”, “WEST”)
I hope this post was useful and enjoyable for you. If you have any questions or feedback, please leave a comment below.
References: MSDN-Enumeration types
Recommended Articles:
- Generic Delegates in C# With Examples
- C# Polymorphism: Different types of polymorphism in C# with examples
- IEnumerable Interface in C# with examples
- Constructors in C# with Examples
- C# Static Class, Methods, Constructors, and Fields with examples
- 10 Difference between interface and abstract class In C#
- Properties In C# with examples
- C# Dictionary with Examples
- Multithreading in C#
- Sealed Class in C# with examples
- IEnumerable Interface in C# with examples
- C# List Class With Examples
- C# Tuple
- Difference Between Array And ArrayList In C#: Choosing the Right Collection - May 28, 2024
- C# Program to Capitalize the First Character of Each Word in a String - February 21, 2024
- C# Program to Find the Longest Word in a String - February 19, 2024