2013-02-20 6 views
63

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

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

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

答えて

110

使用Enumの静的メソッド、GetNamesをしたいです。あなたがenum一種類のみのためにのみこれを行う方法を作成したい、ともListにその配列を変換した場合、あなたはこのような何かを書くことができます

Enum.GetNames(typeof(DataSourceTypes)) 

:それはそうのように、string[]を返し

+4

あなたは自分で答えられるようにこの質問をしましたか? – juharr

+6

あなたはあなた自身の質問に尋ねることができます。私の懸念は、これはとにかく重複した質問であるということでしょう –

+1

はWikiになっているはずです! –

17

私は別のソリューションを追加したい: 私の場合は、ドロップダウンボタンのリスト項目でEnumグループを使用する必要があります。私は次のメソッドを作成したヘルパークラス(HelperMethods)で

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

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

ADDITION:いずれの場合で あなたは、このメソッドを実装したい場合は、以下のものが必要です。列挙のための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(); 
     */ 

    } 
+1

非常に便利です!ありがとう;) –

+0

これは、このシンプルで非常に一般的な質問の別の側面、感謝します。 –

関連する問題