Прескочи до съдържанието
Редактирай

Enum

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);
    }
}

Добри практики

  1. Използвайте единствено число за името на enum
  2. Използвайте PascalCase за имената на стойностите
  3. Не започвайте имената с цифри
  4. Използвайте [Flags] атрибут за битови операции
  5. Документирайте специални стойности