C#
Enum casting
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
-
(int)Color.Green ne döndürür?
enum Color { Red, Green, Blue }
Cevabı göster
1 — Doğru! Green ikinci üye olduğundan (int) dönüşümü 1 verir.
-
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);
-
İşlemi sonucuyla eşleştir
- (int)Color.Red
- 0
- (Color)1
- Color.Green
- Enum.IsDefined
- geçerlilik kontrolü
Sıradaki ders: Enum.Parse