C# Enum Değerleri

  • 19
  • (1)
  • (5)
  • 01 Haz 2017

Enum yapıları sayısal sabitlere karşılık gelen isimlendirilmiş değerlerin tek bir veri türü olarak tanımlanmış halidir.

Kısa bir örnekle daha net açıklanabilir.


public enum Durum { BagliDegil, Baglaniyor, Baglandi, Kapali }

Yukarıdaki şekilde tanımlanan enum bir bağlantının bağlantı durumu için kullanılabilir. Eğer bağlantı durumunu string bir değişkenle denetlerseniz bu değişkeni kodlama esnasında yanlış yazma ihtimalinizde derleyici bu yanlışı farketmeyecektir.


string baglanti = "BagliDegil";
// ... bağlanma işlemleri
baglanti = "Baglandi";
// ... bağlanma sonrası
if (baglanti == "Bagladi")
{
    // ... bağlanırsa çalıştır
}

Yukarıda if koşulunda "Baglandi" yerine "Bagladi" yazıldığı için ve bu değer string olduğu için derlenip çalıştırılacak, ancak istenen sonuç elde edilmeyecektir. Sonucun neden elde edilmediğinin tespiti içinse yazılımcı tekrar koda dönüp sorunun ne olduğunu arayacak ve zaman kaybedecektir.

Bunun yerine şöyle bir kod yazılabilir.


Durum baglanti = Durum.BagliDegil;
// ... bağlanma işlemleri
baglanti = Durum.Baglandi;
// ... bağlanma sonrası
if (baglanti == Durum.Bagladi)
{
    // ... bağlanırsa çalıştır
}

Derleyici bu kodu asla derlemeyecek ve Visual Studio sorunun ne olduğunu doğrudan gösterecektir. Çünkü Durum' a ait Bagladi diye bir enum elemanı bulunmamaktır.

Aşağıdaki örneği uygulayabilir veya detaylı inceleyebilirsiniz.


enum Cins { TerrierMaltese, CavalierKingCharles, EnglishCocker, Kangal,
    Rottweiler, Spitz }

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            // Her köpek cinsi için aynı indisli fiyatlar
            float[] fiyatlar = new float[] { 2000, 2500, 1250, 800, 3750, 3200 };
            // Enum değişkeninin değerlerini bu şekilde listeye aktarabilirsiniz
            var cinsler = Enum.GetNames(typeof(Cins)).ToList();
            // Değerleri ekrana yazdırır
            foreach (var cins in cinsler)
            {
                Console.WriteLine($"{cinsler.IndexOf(cins)}) {cins}");
            }
            Console.Write("Seçim Yapın:");
            // Seçimi int değerinden Cins enum değerine dönüştürür
            var secilen = (Cins)Convert.ToInt32(Console.ReadLine());
            switch (secilen)
            {
                case Cins.TerrierMaltese: // karşılığı 0' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 3 gün");
                    break;
                case Cins.CavalierKingCharles: // karşılığı 1' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 4 gün");
                    break;
                case Cins.EnglishCocker: // karşılığı 2' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 5 gün");
                    break;
                case Cins.Kangal: // karşılığı 3' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 1 gün");
                    break;
                case Cins.Rottweiler: // karşılığı 4' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 2 gün");
                    break;
                case Cins.Spitz: // karşılığı 5' dır
                    Console.WriteLine($"{secilen.ToString()} fiyatı: {fiyatlar[(int)secilen].ToString("0.00 TL")} teslimat: 5 gün");
                    break;
                default:
                    return;
            }
            Console.ReadKey();
        }
    }
}

Paylaşın
Etiket Bulutu