CodeBlanks Logo Icon CodeBlanks

Enum casting

C# kursu · Başlangıç · Ders 102/116

Enum ile int arasında dönüşüm yapmayı öğrenirsin.

Enum'dan int'e dönüşüm

Bir enum değerini temel tamsayı değerine çevirmek için (int) dönüşümünü kullanırsın. Bu, enum değerini bir hesapta kullanmak ya da veritabanına sayı olarak yazmak istendiğinde işine yarar. Dönüşüm, derleme zamanında bilinen bir işlemdir.

Örneğin enum Color { Red, Green, Blue } tanımında (int)Color.Green ifadesi 1 verir. Burada Color.Green aslında bir tamsayıdır; yalnızca türlü güvenlik için enum olarak tutulur. Sayısal karşılığı gerektiğinde dönüşüm yapılır.

int'ten enum'a dönüşüm

Ters yönü de mümkündür: bir tamsayıyı (EnumName) biçiminde enum'a dönüştürebilirsin. Bu, veritabanından okunan sayısal kodu enum değerine çevirmek için kullanışlıdır. Dikkat: sayı enum'da karşılığı olmasa bile dönüşüm başarılı olur.

Örneğin Color c = (Color)1; satırı c'ye Color.Green değerini atar. Ama (Color)99 da derlenir ve çalışır; yalnızca ekrana 99 yazar. Bu yüzden dönüşümden önce Enum.IsDefined ile geçerlilik kontrolü yapmak iyi bir alışkanlıktır.

Geçersiz değer denetimi

Bir tamsayı enum'da karşılığı olmasa bile dönüşüm başarılı olur; bu da beklenmedik davranışlara yol açabilir. Bunu önlemek için Enum.IsDefined(typeof(EnumName), value) çağrısı ile değerin geçerli bir enum üyesi olup olmadığını kontrol edersin.

Örnek: if (Enum.IsDefined(typeof(Color), 99)) { ... } ifadesi false döner çünkü Color enum'unda 99 yoktur. Böylece dönüşümden önce güvenli bir kapı kurmuş olursun ve geçersiz değerler programını bozmaz.

Uygulama Durumu int olarak yazdır

Status adında bir enum tanımla; üyeleri Active, Inactive, Pending olsun. Main içinde Status s = Status.Pending; biçiminde s'ye Pending ata ve (int)s değerini Console.WriteLine ile yazdır.

Örnek çözümü göster
enum Status { Active, Inactive, Pending } tanımla, sonra Status s = Status.Pending; ve Console.WriteLine((int)s); ekle.
Örnek çözüm:
using System;

enum Status { Active, Inactive, Pending }

class Program
{
    static void Main()
    {
        Status s = Status.Pending;
        Console.WriteLine((int)s);
    }
}

Kendini test et

  1. (int)Color.Green ne döndürür?

    enum Color { Red, Green, Blue }
    • 0
    • 2
    • Green
    • 1
    Cevabı göster

    1 — Doğru! Green ikinci üye olduğundan (int) dönüşümü 1 verir.

  2. Sayıyı enum'a çevir

    int code = 2;
    Color c = ____;
    Console.WriteLine(c);
    Cevabı göster
    int code = 2;
    Color c = (Color)code;
    Console.WriteLine(c);
  3. İşlemi sonucuyla eşleştir

    (int)Color.Red
    0
    (Color)1
    Color.Green
    Enum.IsDefined
    geçerlilik kontrolü

Başlangıç bölümündeki tüm dersler