enumに設定してある内容をコンボボックスのデータとして取得する方法を下記に記します。
enumの定義を下記のようにします。Descriptionに表示する内容を定義します。
public enum EncodeType
{
[Description("shift_jis")]
ShiftJis = 0,
[Description("utf-8")]
UTF8 = 1,
}
{
[Description("shift_jis")]
ShiftJis = 0,
[Description("utf-8")]
UTF8 = 1,
}
Enum値を取得する拡張クラスを作成します。
public static int Value(this Enum value)
{
// Fieldを取得します。
var fi = value.GetType().GetField(value.ToString());
// Fieldから値を取得し返します。
return (int)fi.GetValue(null);
}
{
// Fieldを取得します。
var fi = value.GetType().GetField(value.ToString());
// Fieldから値を取得し返します。
return (int)fi.GetValue(null);
}
Enum値に対応する名称を取得する拡張クラスを作成します。
public static string Name(this Enum value)
{
// 指定されたEumのFieldを取得します。
var fi = value.GetType().GetField(value.ToString());
if (fi == null)
{
// 取得できなかった時、NULLを返します。
return null;
}
// DescriptionAttributeを取得します。
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
{
// DescriptionAttributeが存在する時、DescriptionAttributeの内容を返します。
return attributes[0].Description;
}
else
{
// DescriptionAttributeが存在しない時、値に対応する名称を返します。
return value.ToString();
}
}
{
// 指定されたEumのFieldを取得します。
var fi = value.GetType().GetField(value.ToString());
if (fi == null)
{
// 取得できなかった時、NULLを返します。
return null;
}
// DescriptionAttributeを取得します。
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
{
// DescriptionAttributeが存在する時、DescriptionAttributeの内容を返します。
return attributes[0].Description;
}
else
{
// DescriptionAttributeが存在しない時、値に対応する名称を返します。
return value.ToString();
}
}
コンボボックス用データを取得する拡張クラスを作成します。
public static ICollection GetComboData<T>(this T value)
{
// Enumの値リストを取得します。
var fields = value.GetType().GetFields();
var enmName = value.GetType().Name;
// 値リストからコンボデータを作成します。
var datas = fields.ToList().Where(w => w.FieldType.Name == enmName).Select(s => new Models.ComboBoxModel()
{
Value = ((int)s.GetValue(null)).ToString(),
Name = Name((Enum)s.GetValue(null)),
}).ToList();
// 作成したコンボデータを返します。
return datas;
}
{
// Enumの値リストを取得します。
var fields = value.GetType().GetFields();
var enmName = value.GetType().Name;
// 値リストからコンボデータを作成します。
var datas = fields.ToList().Where(w => w.FieldType.Name == enmName).Select(s => new Models.ComboBoxModel()
{
Value = ((int)s.GetValue(null)).ToString(),
Name = Name((Enum)s.GetValue(null)),
}).ToList();
// 作成したコンボデータを返します。
return datas;
}
※Models.ComboBoxModelはValue とName を持つモデルです。
使用例
public void OnClick()
{
var comboData = (default(EncodeType)).GetComboData();
}
{
var comboData = (default(EncodeType)).GetComboData();
}
上記でEnumの値を全て取得できますし、enumの内容が変更されても対応がenumの変更のみで終わる為、保守性が上がります。