techmore.in

C# - Enums

Enums (short for enumerations) in C# are a special "value type" that defines a set of named constants. They are used to represent a collection of related values in a more readable and manageable way compared to using plain constants or integers.

1. Defining an Enum

You define an enum using the enum keyword, followed by the name of the enum and its members.

Syntax:

csharp
public enum EnumName { Member1, Member2, Member3 }

Example:

csharp
public enum DaysOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

2. Using Enums

You can use enums to assign named values to variables and perform operations based on those values.

Example:

csharp
class Program { static void Main() { DaysOfWeek today = DaysOfWeek.Monday; Console.WriteLine(today); // Outputs: Monday } }

3. Underlying Type

By default, the underlying type of an enum is int, but you can specify a different integral type (e.g., byte, short, long) if needed.

Syntax:

csharp
public enum EnumName : byte { Member1 = 1, Member2 = 2 }

Example:

csharp
public enum ErrorCode : byte { None = 0, NotFound = 1, InvalidOperation = 2 }

4. Assigning Values

You can explicitly assign values to enum members. If you don't assign a value, the first member defaults to 0, and each subsequent member is incremented by 1.

Example:

csharp
public enum Status { Pending = 1, InProgress = 2, Completed = 3 }

5. Casting Enums

Enums can be cast to their underlying type (e.g., int) and vice versa.

Example:

csharp
class Program { static void Main() { Status status = Status.InProgress; int statusCode = (int)status; Console.WriteLine(statusCode); // Outputs: 2 Status newStatus = (Status)statusCode; Console.WriteLine(newStatus); // Outputs: InProgress } }

6. Enum Methods

Enums provide several useful methods:

  • Enum.GetValues: Returns an array of the values of the constants in a specified enum type.
  • Enum.GetNames: Returns an array of the names of the constants in a specified enum type.
  • Enum.IsDefined: Determines whether a specified value or name is defined in a specified enum type.

Example:

csharp
class Program { static void Main() { // Get all enum values Array values = Enum.GetValues(typeof(Status)); foreach (Status value in values) { Console.WriteLine(value); } // Get all enum names string[] names = Enum.GetNames(typeof(Status)); foreach (string name in names) { Console.WriteLine(name); } // Check if a value is defined bool isValid = Enum.IsDefined(typeof(Status), 2); Console.WriteLine(isValid); // Outputs: True } }

7. Flags Enum

Flags enums are used to represent a combination of options. They are typically decorated with the [Flags] attribute and use bitwise operations to combine values.

Example:

csharp
[Flags] public enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4, ReadWrite = Read | Write } class Program { static void Main() { Permissions myPermissions = Permissions.Read | Permissions.Write; Console.WriteLine(myPermissions.HasFlag(Permissions.Read)); // Outputs: True Console.WriteLine(myPermissions.HasFlag(Permissions.Execute)); // Outputs: False // Combine permissions Permissions combinedPermissions = myPermissions | Permissions.Execute; Console.WriteLine(combinedPermissions); // Outputs: Read, Write, Execute } }

8. Enum as a Switch Case

Enums are often used in switch statements to execute different code based on the enum value.

Example:

csharp
class Program { static void Main() { Status currentStatus = Status.Completed; switch (currentStatus) { case Status.Pending: Console.WriteLine("Status is Pending."); break; case Status.InProgress: Console.WriteLine("Status is In Progress."); break; case Status.Completed: Console.WriteLine("Status is Completed."); break; default: Console.WriteLine("Unknown Status."); break; } } }

Summary

Enums in C# provide a way to define a set of named constants, making your code more readable and maintainable. They support various operations, including value assignment, casting, and bitwise operations. By using enums effectively, you can represent and manage sets of related values in a clear and organized manner.