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