列挙型をList <string>に変換します


102

次の列挙型を文字列のリストに変換するにはどうすればよいですか?

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

私はこの正確な質問を見つけることができませんでした。このEnum to Listが最も近いですが、特に欲しいですList<string>

回答:


177

Enumの静的メソッドを使用しGetNamesます。次のようにを返しますstring[]

Enum.GetNames(typeof(DataSourceTypes))

1つのタイプのに対してのみこれを実行enumし、その配列をに変換するメソッドを作成する場合は、List次のように記述できます。

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

Using System.Linq;.ToList()を使用するには、クラスの最上位で必要です


7
@DCShannonは、一般的な質問/回答を編集したり、説明を縮小したりしないでください。あなたと私は速記コードを理解していますが、初心者はそれを彼らの学習関連付けるためにすべての追加の詳細が必要です。
ジェレミー・トンプソン

文字列配列ではなくEnum.GetNames(typeof(DataSourceTypes))ジェネリックSystem.Arrayを返すようですか?
sookie 2017年

@sookie、MSDNリンクを参照し、これはの署名であるによりgetNames() :メソッドpublic static string[] GetNames
ジェレミー・トンプソン

30

別のソリューションを追加したい:私の場合、ドロップダウンボタンのリスト項目でEnumグループを使用する必要があります。だから彼らにはスペースがあるかもしれません、すなわちよりユーザーフレンドリーな説明が必要です:

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

ヘルパークラス(HelperMethods)で、次のメソッドを作成しました。

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

このヘルパーを呼び出すと、アイテムの説明のリストが表示されます。

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

追加:いずれの場合でも、このメソッドを実装する場合は、列挙型の:GetDescription拡張が必要です。これは私が使用するものです。

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

    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.