CSharp

C# Enum Değerleri liste halinde alma ve kullanma

Enum yazılım geliştirmede sıkça kullandığımız bir tiptir. Veritabanından servis katmanına hatta sunum katmanına kadar her yerde kullanılır.

Enumda bulunan değerleri bazen liste halinde almak isteyebiliriz. Bu liste sunum katmanında mesala bir dropdown için olabileceği gibi servis katmanında veri işlemek için de olabilir. Enum listesinin kullanılması ekstra kodlamayı aza indirecektir.

Kullanım sırasında kullanıcı dostu görsellik için description özelliği kullanmak iyi bir fikir olabilir.

Örnek olarak öğrenim türü listesini sağlayan bir enumla devam edelim.

public enum OgrenimTuru
{
    [Description("İlkokul")]
    Ilkokul,
    [Description("Ortaokul")]
    Ortaokul,
    [Description("Lise")]
    Lise,
    [Description("Üniversite")]
    Universite,
    [Description("Yüksek Lisans")]
    YuksekLisans,
    [Description("Doktora")]
    Doktora
}

Enum tipindeki değerlerin listesini almak için bir yardımcı (helper) kodluyoruz. Yardımcının GetEnumDescriptionAndValues<T>metoduna T tipi olarak enum tipini göndereceğiz ve gönderdiğimiz tipde bulunan değerleri ve özellikleri (description) KeyValuePair listesi şeklinde alacağız.

public class EnumHelper
{
    public static List<KeyValuePair<string, int>> GetEnumDescriptionAndValues<T>()
    {
        Type enumType = typeof(T);

        if (enumType.BaseType != typeof(Enum))
            throw new ArgumentException("T is not Enum");

        var result = new List<KeyValuePair<string, int>>();

        foreach (var e in Enum.GetValues(typeof(T)))
        {
            var field = e.GetType().GetField(e.ToString());
            var attributes = (DescriptionAttribute[])field.GetCustomAttributes(typeof(DescriptionAttribute), false);

            result.Add(new KeyValuePair<string, int>((attributes.Length > 0) ? attributes[0].Description : e.ToString(), (int)e));
        }

        return result;
    }
}

GetEnumDescriptionAndValues metodunda liste alınırken description özelliği key olarak,  enumun int değeri ise val olarak alınıyor. Eğer description özelliği yoksa enumdaki değer yazıldığı haliyle stringe çevrilip alınıyor.

Kullanımı;

var OgrenimTuruList =  EnumHelper.GetEnumDescriptionAndValues<OgrenimTuru>();

Artık elimizde OgrenimTuru listesi var. Buradaki sihir ise bu listeyi kullanacağınız katmana ulaştırdığınızda ortaya çıkıyor 🙂

Sunum veya başka bir katmanda kullanımla ilgili isteğiniz olursa ekstra örnek ekleyebilirim.

Sağlıkla kalın..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*