Enumu List <string> 'e dönüştürme


104

Aşağıdaki Enum'u dize listesine nasıl dönüştürebilirim?

[Flags]
public enum DataSourceTypes
{
    None = 0,
    Grid = 1,
    ExcelFile = 2,
    ODBC = 4
};

Tam olarak bu soruyu bulamadım, bu Enum to List en yakın olanı ama özellikle istiyorumList<string>

Yanıtlar:


179

EnumStatik yöntemini kullanın GetNames. Şöyle bir döndürür string[]:

Enum.GetNames(typeof(DataSourceTypes))

Bunu yalnızca bir tür için yapan enumve aynı zamanda bu diziyi a'ya dönüştüren bir yöntem oluşturmak istiyorsanız, şöyle bir Listşey yazabilirsiniz:

public List<string> GetDataSourceTypes()
{
    return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}

Using System.Linq;.ToList () kullanmak için sınıfınızın en üstünde ihtiyacınız olacak


7
@DCShannon lütfen popüler soruları / yanıtları düzenlemeyin ve açıklamaları küçültmeyin. Sen ve ben stenografi kodunu anlarken, yeni başlayanlar öğrendikleriyle ilişkilendirmek için tüm ekstra ayrıntılara ihtiyaç duyar .
Jeremy Thompson

Bir dizge dizisi yerine Enum.GetNames(typeof(DataSourceTypes))bir genel döndürüyor gibi görünüyor System.Array?
sookie

@sookie, msdn bağlantısına bakın, bu GetNames () yönteminin imzasıdır :public static string[] GetNames
Jeremy Thompson

30

Başka bir çözüm eklemek istiyorum: Benim durumumda, aşağı açılır düğme liste öğelerinde bir Enum grubu kullanmam gerekiyor. Dolayısıyla, boşlukları olabilir, yani daha kullanıcı dostu açıklamalara ihtiyaç vardır:

  public enum CancelReasonsEnum
{
    [Description("In rush")]
    InRush,
    [Description("Need more coffee")]
    NeedMoreCoffee,
    [Description("Call me back in 5 minutes!")]
    In5Minutes
}

Bir yardımcı sınıfta (HelperMethods) aşağıdaki yöntemi oluşturdum:

 public static List<string> GetListOfDescription<T>() where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null : Enum.GetValues(t).Cast<Enum>().Select(x => x.GetDescription()).ToList();
    }

Bu yardımcıyı aradığınızda, ürün açıklamalarının listesini alacaksınız.

 List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>();

EK: Her durumda, bu yöntemi uygulamak istiyorsanız, ihtiyacınız olan: enum için GetDescription uzantısı. Kullandığım şey bu.

 public static string GetDescription(this Enum value)
    {
        Type type = value.GetType();
        string name = Enum.GetName(type, value);
        if (name != null)
        {
            FieldInfo field = type.GetField(name);
            if (field != null)
            {
                DescriptionAttribute attr =Attribute.GetCustomAttribute(field,typeof(DescriptionAttribute)) as DescriptionAttribute;
                if (attr != null)
                {
                    return attr.Description;
                }
            }
        }
        return null;
        /* how to use
            MyEnum x = MyEnum.NeedMoreCoffee;
            string description = x.GetDescription();
        */

    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.