Enum’lar, C#’ta adlandırılmış sabitler kümesini temsil etmek için değerli bir araçtır. Sıklıkla, bir enum değerinin dize gösterimini, enum eşdeğerine geri dönüştürmeniz gerekecektir. Bu makale, bu dönüştürmeyi güvenli ve verimli bir şekilde gerçekleştirmek için çeşitli teknikleri inceliyor.
İçindekiler
Enum.Parse()
veEnum.TryParse()
KullanımıEnum.Parse()
ile İstisna İşlemeEnum.IsDefined()
ile Geçerli Enum Değerlerinin Kontrol Edilmesi- En İyi Uygulamalar ve Öneriler
Enum.Parse()
ve Enum.TryParse()
Kullanımı
C#, dize-enum dönüşümü için iki temel yöntem sunar: Enum.Parse()
ve Enum.TryParse()
. Enum.Parse()
basittir ancak giriş dizesi tanımlanmış bir enum değeriyle eşleşmezse bir istisna atar. Enum.TryParse()
, başarı veya başarısızlığı gösteren bir boolean döndürerek daha güvenli bir alternatif sunar.
Enum.Parse()
Örneği:
public enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
public static DaysOfWeek ParseDay(string dayString)
{
return (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayString, true); //true büyük/küçük harf duyarlılığını yok sayar
}
Enum.TryParse()
Örneği:
public static bool TryParseDay(string dayString, out DaysOfWeek day)
{
return Enum.TryParse(dayString, true, out day); //true büyük/küçük harf duyarlılığını yok sayar
}
Enum.TryParse()
istisnalardan kaçınır, bu da geçersiz değerlerin olası olduğu kullanıcı girişi veya harici verileri işlemek için daha uygun hale getirir.
Enum.Parse()
ile İstisna İşleme
Enum.TryParse()
önerilmesine rağmen, Enum.Parse()
ile istisna işlemeyi anlamak çok önemlidir. Bir try-catch
bloğu, olası ArgumentException
‘ları zarifçe yönetebilir:
public static DaysOfWeek ParseDayWithExceptionHandling(string dayString)
{
try
{
return (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayString, true); //true büyük/küçük harf duyarlılığını yok sayar
}
catch (ArgumentException ex)
{
Console.WriteLine($"'{dayString}' ayrıştırılırken hata: {ex.Message}");
// Hatayı uygun şekilde işleyin, örneğin, varsayılan bir değer döndürün veya özel bir istisna atın.
return DaysOfWeek.Monday; // veya özel bir istisna atın
}
}
Enum.IsDefined()
ile Geçerli Enum Değerlerinin Kontrol Edilmesi
Ayrıştırmadan önce, Enum.IsDefined()
kullanarak giriş dizesinin geçerli bir enum değerine karşılık gelip gelmediğini doğrulamak akıllıca olacaktır. Bu, kodun sağlamlığını artırır ve gereksiz istisnaları önler:
public static bool IsValidDay(string dayString)
{
return Enum.IsDefined(typeof(DaysOfWeek), dayString);
}
En İyi Uygulamalar ve Öneriler
Çoğu senaryo için, istisna güvenli yapısı nedeniyle Enum.TryParse()
önerilen yaklaşımdır. Ayrıştırmadan önce gelişmiş doğrulama için Enum.IsDefined()
ile birleştirin. Sağlam ve kullanıcı dostu uygulamalar oluşturmak için potansiyel hataları her zaman zarif bir şekilde işleyin. Başarısız dönüşümleri etkili bir şekilde yönetmek için varsayılan bir değer kullanmayı veya özel bir istisna atmayı düşünün.