次のEnumを文字列のリストに変換するにはどうすればよいですか?
[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};
私はこの正確な質問を見つけることができませんでした、これは リストへの列挙 が最も近いですが、特にList<string>
が欲しいです
Enum
の静的メソッド GetNames
を使用します。次のようにstring[]
を返します。
Enum.GetNames(typeof(DataSourceTypes))
1つのタイプのenum
に対してのみこれを実行し、その配列をList
に変換するメソッドを作成する場合、次のように記述できます。
public List<string> GetDataSourceTypes()
{
return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}
別のソリューションを追加したい:私の場合、ドロップダウンボタンリスト項目で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>();
追加:いずれの場合でも、このメソッドを実装する場合は、enumの: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();
*/
}