Ubah enum menjadi List <string>

102

Bagaimana cara mengonversi Enum berikut menjadi Daftar string?

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

Saya tidak dapat menemukan pertanyaan yang tepat ini, Enum to List ini adalah yang terdekat tetapi saya secara khusus inginList<string>

Jeremy Thompson
sumber

Jawaban:

177

Gunakan Enummetode statis GetNames,. Ini mengembalikan string[], seperti:

Enum.GetNames(typeof(DataSourceTypes))

Jika Anda ingin membuat metode yang hanya melakukan ini untuk satu jenis enum, dan juga mengonversi larik itu menjadi a List, Anda dapat menulis sesuatu seperti ini:

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

Anda akan membutuhkan Using System.Linq;di bagian atas kelas Anda untuk menggunakan .ToList ()

DCShannon
sumber
7
@DCShannon tolong jangan edit pertanyaan / jawaban populer dan kurangi penjelasannya. Meskipun Anda dan saya memahami kode singkatan, newbie membutuhkan semua detail tambahan untuk mengaitkannya dengan pembelajaran mereka .
Jeremy Thompson
Tampaknya Enum.GetNames(typeof(DataSourceTypes))mengembalikan generik System.Arraydaripada array string?
sookie
@sookie, lihat tautan msdn, ini adalah tanda tangan metode GetNames () :public static string[] GetNames
Jeremy Thompson
30

Saya ingin menambahkan solusi lain: Dalam kasus saya, saya perlu menggunakan grup Enum dalam item daftar tombol drop-down. Jadi mereka mungkin memiliki ruang, yaitu deskripsi yang lebih ramah pengguna diperlukan:

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

Di kelas helper (HelperMethods) saya membuat metode berikut:

 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();
    }

Saat Anda memanggil penolong ini, Anda akan mendapatkan daftar deskripsi item.

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

TAMBAHAN: Bagaimanapun, jika Anda ingin menerapkan metode ini, Anda memerlukan: ekstensi GetDescription untuk enum. Ini yang saya gunakan.

 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();
        */

    }
rkmorgan
sumber