C# ile Enumlara String Değer Atamak

null

public enum Sehirler { Istanbul=34, Ankara=06, Izmir=35}

Yukarıdaki gibi enum tanımını bir çoğumuz biliyodur. Bu yazımıda bir enuma herhangi bir string değeri nasıl atayabilceğinizi göstereceğim.

Bunun için ilk olarak kodumuzu aşağıdaki gibi düzenliyoruz.

using System.ComponentModel;

public enum Sehirler
{
     [Description("İstanbul")]
     Istanbul=34,
     Ankara=06,
     [Description("İzmir")]
     Izmir=35
}

Peki açıklamaya nasıl ulaşacağız.

Sehirler.Istanbul.ToString(); metodunu kullanırsak eskisi gibi bir sonuçla karşılaşacağız. Bunu düzeltmek içinse aşağıdaki metodu eklememiz gerekmekte.

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

    if (attributes != null && attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}

Kullanmak için ise;

GetEnumDescription(Sehirler.Istanbul);

Enumerable olarak kullanmak için ise aşağıdaki kodu ekliyoruz.

public static IEnumerable<T> EnumToList<T>()
{
    Type enumType = typeof(T);

    if (enumType.BaseType != typeof(Enum))
        throw new ArgumentException("T must be of type System.Enum");

    Array enumValArray = Enum.GetValues(enumType);
    List<T> enumValList = new List<T>(enumValArray.Length);

    foreach (int val in enumValArray)
    {
        enumValList.Add((T)Enum.Parse(enumType, val.ToString()));
    }

    return enumValList;
}

Kullanmak için

foreach (Sehirler sehir in EnumToList<Sehirler>())
{
    Console.WriteLine(GetEnumDescription(sehir));
}

Kaynak