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:
csharppublic enum EnumName
{
Member1,
Member2,
Member3
}
Example:
csharppublic 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:
csharpclass 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:
csharppublic enum EnumName : byte
{
Member1 = 1,
Member2 = 2
}
Example:
csharppublic 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:
csharppublic 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:
csharpclass 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:
csharpclass 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:
csharpclass 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.