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 pahaları bazen liste halinde almak isteyebiliriz. Bu liste sunum katmanında mesala bir dropdown için olabileceği üzere servis katmanında data 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 düzgün bir fikir olabilir.
Örnek olarak tahsil çeşidi 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 kıymetlerin 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 kıymetleri ve özellikleri (description) KeyValuePair listesi halinde 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 kıymeti ise val olarak alınıyor. Şayet description özelliği yoksa enumdaki bedel 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 yahut öteki bir katmanda kullanımla ilgili isteğiniz olursa ekstra örnek ekleyebilirim.
Sağlıkla kalın..