C# Dersleri 79 - Enum


C# Enum (Numaralandırma) Nedir?

Enum (Enumeration - Numaralandırma), C# dilinde sabit değerlerin bir grup halinde tutulmasını sağlayan bir veri tipidir. Enum'lar, programda belirli bir kategoriye ait sabit değerleri anlamlı isimlerle saklamak için kullanılır.

Enum’un Temel Özellikleri

  • Enum, varsayılan olarak int türündedir ve her eleman sıfırdan başlayarak otomatik olarak numaralandırılır.
  • Enum değerleri varsayılan olarak 0, 1, 2, ... şeklinde artar, ancak istenirse özel değerler atanabilir.
  • Kodun okunabilirliğini artırır ve hata yapma olasılığını azaltır.

Enum Tanımlama

Bir enum tanımlamak için enum anahtar kelimesi kullanılır.

enum Days
{
    Monday,    // 0
    Tuesday,   // 1
    Wednesday, // 2
    Thursday,  // 3
    Friday,    // 4
    Saturday,  // 5
    Sunday     // 6
}

Enum Kullanımı

using System;

class Program
{
    static void Main(string[] args)
    {
        Days today = Days.Friday;
        Console.WriteLine($"Bugün: {today}");
        Console.WriteLine($"Bugünün sayısal değeri: {(int)today}");
    }
}

Programın Çıktısı

Bugün: Friday
Bugünün sayısal değeri: 4

Özel Değerlerle Enum Tanımlama

Enum elemanlarına özel değerler atanabilir:

enum Status
{
    Pending = 1,
    Approved = 2,
    Rejected = 3
}

class Program
{
    static void Main(string[] args)
    {
        Status currentStatus = Status.Approved;
        Console.WriteLine($"Durum: {currentStatus} ({(int)currentStatus})");
    }
}

Programın Çıktısı

Durum: Approved (2)

Enum ile Switch Kullanımı

Enum değerlerini kontrol etmek için switch-case kullanılabilir.

enum TrafficLight
{
    Red,
    Yellow,
    Green
}

class Program
{
    static void Main(string[] args)
    {
        TrafficLight light = TrafficLight.Red;

        switch (light)
        {
            case TrafficLight.Red:
                Console.WriteLine("Dur!");
                break;
            case TrafficLight.Yellow:
                Console.WriteLine("Hazır ol!");
                break;
            case TrafficLight.Green:
                Console.WriteLine("Geç!");
                break;
        }
    }
}

Programın Çıktısı

Dur!

Enum İçindeki Değerleri Listeleme

Enum elemanlarını Enum.GetValues() ile listeleyebilirsiniz.

enum Colors
{
    Red, Green, Blue, Yellow
}

class Program
{
    static void Main(string[] args)
    {
        foreach (var color in Enum.GetValues(typeof(Colors)))
        {
            Console.WriteLine($"{color} = {(int)color}");
        }
    }
}

Programın Çıktısı

Red = 0
Green = 1
Blue = 2
Yellow = 3

Enum ile String ve Integer Dönüştürme

Enum değerlerini string ve int türüne dönüştürebilirsiniz.

enum PaymentStatus
{
    Pending = 1,
    Completed = 2,
    Failed = 3
}

class Program
{
    static void Main(string[] args)
    {
        // Enum değerini string'e çevirme
        PaymentStatus status = PaymentStatus.Completed;
        string statusText = status.ToString();
        Console.WriteLine($"Durum: {statusText}");

        // String'i Enum'a çevirme
        PaymentStatus parsedStatus = (PaymentStatus)Enum.Parse(typeof(PaymentStatus), "Failed");
        Console.WriteLine($"Çevrilen durum: {parsedStatus}");

        // Integer'ı Enum'a çevirme
        PaymentStatus statusFromInt = (PaymentStatus)2;
        Console.WriteLine($"Sayıdan çevrilen durum: {statusFromInt}");
    }
}

Programın Çıktısı

Durum: Completed
Çevrilen durum: Failed
Sayıdan çevrilen durum: Completed

Flags Attribute Kullanımı

Birden fazla değeri aynı anda kullanabilmek için [Flags] attribute'u kullanılabilir.

[Flags]
enum FilePermissions
{
    Read = 1,
    Write = 2,
    Execute = 4
}

class Program
{
    static void Main(string[] args)
    {
        FilePermissions permissions = FilePermissions.Read | FilePermissions.Write;
        Console.WriteLine($"İzinler: {permissions}");

        // Belirli bir iznin olup olmadığını kontrol etme
        bool canRead = (permissions & FilePermissions.Read) == FilePermissions.Read;
        Console.WriteLine($"Okuma izni var mı? {canRead}");
    }
}

Programın Çıktısı

İzinler: Read, Write
Okuma izni var mı? True

Sonuç

Enum, belirli sabit değerleri daha okunaklı ve yönetilebilir hale getirmek için kullanılır. Özellikle belirli kategorilere ayrılmış değerleri temsil etmek için idealdir. Ayrıca, Enum değerleri switch yapılarıyla kontrol edilerek programın akışı daha düzenli hale getirilebilir.