Enum’lar (sıralama sayıları), C# dilinde adlandırılmış sabit kümeleri tanımlamak için değerli bir araçtır. Sıklıkla, bir tamsayı değerini karşılık gelen enum üyesine geri dönüştürmeniz gerekir. Bu makale, güvenli ve verimli bir şekilde bu dönüştürmeyi gerçekleştirmek için çeşitli teknikleri inceleyerek en iyi uygulamaları vurgular.
İçerik Tablosu
Doğrudan Dönüştürme
En basit yöntem doğrudan dönüştürmedir. Bu, yalnızca tamsayının geçerli bir enum üyesini temsil ettiğinden eminseniz işe yarar. Ancak, hata yapmaya müsaittir ve tamsayı geçersiz ise çalışma zamanı hatalarına yol açabilir.
public enum DaysOfWeek
{
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7
}
public class Example
{
public static void Main(string[] args)
{
int dayValue = 3;
DaysOfWeek day = (DaysOfWeek)dayValue;
Console.WriteLine(day); // Çıktı: Wednesday
// dayValue geçerli bir enum üyesi değilse çalışma zamanında bir istisna oluşturacaktır.
int invalidDayValue = 10;
DaysOfWeek invalidDay = (DaysOfWeek)invalidDayValue;
Console.WriteLine(invalidDay);
}
}
Tamsayının geçerliliğinden kesinlikle emin olmadığınız sürece doğrudan dönüştürmeden kaçının. Hata işleme eksikliği, üretim kodu için riskli hale getirir.
Enum.Parse
Kullanımı
Enum.Parse
daha sağlam bir çözüm sunar. Enum türünü ve tamsayı dize gösterimini girdi olarak alır ve karşılık gelen enum üyesini döndürür. Tamsayı tanımlanmış bir enum değeri değilse ArgumentException
atar.
public class Example
{
public static void Main(string[] args)
{
int dayValue = 3;
try
{
DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayValue.ToString());
Console.WriteLine(day); // Çıktı: Wednesday
}
catch (ArgumentException)
{
Console.WriteLine("Geçersiz enum değeri.");
}
}
}
Enum.Parse
, beklenmedik çökmeleri önleyerek geçersiz girdileri açıkça işlediği için doğrudan dönüştürmeden daha güvenlidir. Ancak, istisna işleme ek yük getirir.
Enum.IsDefined
Kullanımı
Gelişmiş verimlilik ve güvenlik için, Enum.Parse
‘ı çağırmadan önce Enum.IsDefined
kullanarak tamsayının enum içindeki varlığını kontrol edin.
public class Example
{
public static void Main(string[] args)
{
int dayValue = 3;
if (Enum.IsDefined(typeof(DaysOfWeek), dayValue))
{
DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayValue.ToString());
Console.WriteLine(day); // Çıktı: Wednesday
}
else
{
Console.WriteLine("Geçersiz enum değeri.");
}
}
}
Bu, istisna olasılığını azaltarak Enum.Parse
‘ın güvenliğini önleyici bir kontrol ile birleştirir.
Enum.TryParse
Kullanımı
Enum.TryParse
önerilen yaklaşımdır. Dönüştürmeyi dener, istisna atmadan başarı veya başarısızlığı gösteren bir boolean değeri döndürür. Bu, daha temiz ve daha verimli hata işleme sağlar.
public class Example
{
public static void Main(string[] args)
{
int dayValue = 3;
DaysOfWeek day;
if (Enum.TryParse(dayValue.ToString(), out day))
{
Console.WriteLine(day); // Çıktı: Wednesday
}
else
{
Console.WriteLine("Geçersiz enum değeri.");
}
}
}
Enum.TryParse
, istisnasız hata işleme ve verimliliği nedeniyle en sağlam ve tercih edilen yöntemdir.
Sonuç
C#’da tamsayıları enum’lara dönüştürmek için birden fazla yöntem vardır. Doğrudan dönüştürme özlü olsa da en az güvenli olanıdır. Enum.Parse
istisna tabanlı işleme sunar ve Enum.IsDefined
önleyici bir kontrol ekler. Ancak, Enum.TryParse
temiz istisnasız hata işleme sağladığı için en sağlam ve verimli çözüm olarak öne çıkar. Bağlamınıza en uygun yöntemi seçin, her zaman güvenliği ve sürdürülebilirliği önceliklendirin. Beklenmedik uygulama davranışlarını önlemek için potansiyel hataları düzgün bir şekilde ele alın.