Enum
Enum в C# е тип данни, който съдържа списък от константи. Той се използва за по-ясно четим код и по-добро управление на стойностите.
Основно деклариране
public enum DayOfWeek
{
Monday, // 0
Tuesday, // 1
Wednesday, // 2
Thursday, // 3
Friday, // 4
Saturday, // 5
Sunday // 6
}
Задаване на стойности
public enum HttpStatusCode
{
OK = 200,
NotFound = 404,
InternalServerError = 500
}
Използване на enum
public class Program
{
public static void Main()
{
DayOfWeek today = DayOfWeek.Monday;
// Сравнение
if (today == DayOfWeek.Monday)
{
Console.WriteLine("It's Monday!");
}
// Switch израз
switch (today)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("It's weekend!");
break;
default:
Console.WriteLine("It's a workday!");
break;
}
}
}
Flags атрибут
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4,
All = Read | Write | Execute
}
public class Program
{
public static void Main()
{
// Комбиниране на флагове
Permissions userPermissions = Permissions.Read | Permissions.Write;
// Проверка за флаг
bool canRead = userPermissions.HasFlag(Permissions.Read); // true
// Добавяне на флаг
userPermissions |= Permissions.Execute;
// Премахване на флаг
userPermissions &= ~Permissions.Write;
// Преобразуване към string
Console.WriteLine(userPermissions.ToString()); // "Read, Execute"
}
}
Преобразуване
public class EnumConversion
{
public static void Main()
{
// От string към enum
DayOfWeek day = Enum.Parse<DayOfWeek>("Monday");
// От число към enum
DayOfWeek dayFromInt = (DayOfWeek)1; // Tuesday
// От enum към число
int dayNumber = (int)DayOfWeek.Wednesday; // 2
// Опит за парсване
if (Enum.TryParse<DayOfWeek>("Invalid", out DayOfWeek result))
{
Console.WriteLine("Parsed successfully");
}
}
}
Enum с различен базов тип
public enum ByteEnum : byte
{
Small = 1,
Medium = 2,
Large = 3
}
public enum LongEnum : long
{
VeryLargeNumber = 9223372036854775807 // Max long value
}
Полезни методи
public class EnumUtilities
{
public static void Main()
{
// Вземане на всички стойности
DayOfWeek[] allDays = Enum.GetValues<DayOfWeek>();
// Вземане на всички имена
string[] dayNames = Enum.GetNames<DayOfWeek>();
// Проверка дали стойност съществува
bool isValid = Enum.IsDefined<DayOfWeek>(42);
// Вземане на име от стойност
string name = Enum.GetName<DayOfWeek>(DayOfWeek.Friday);
}
}
Добри практики
- Използвайте единствено число за името на enum
- Използвайте PascalCase за имената на стойностите
- Не започвайте имената с цифри
- Използвайте [Flags] атрибут за битови операции
- Документирайте специални стойности