これは私にとって難しい概念なので、我慢してください。アイテムを文字列として返すメソッドがありenum
ます(DBストレージ用)。メソッドは次のとおりです。
public static IEnumerable<SelectListItem> GetItemsFromEnum<T>
(T selectedValue = default(T)) where T : struct
{
return from name in Enum.GetNames(typeof(T))
let enumValue = Convert.ToString((T)Enum.
Parse(typeof(T), name, true))
select new SelectListItem
{
Text = GetEnumDescription(name, typeof(T)),
Value = enumValue,
Selected = enumValue.Equals(selectedValue)
};
}
(注:テキストを取得して UI にわかりやすいものを表示GetEnumDescription
するクラスの別のメソッドです。)[Display(Name="")
単一の選択入力 (ラジオ ボタン、ドロップダウン) の場合、これはうまく機能します。ただし、複数選択(リストボックス、チェックボックスリスト)では、enum
[Flags]
属性を使用してDBに保存することを考えていますint
.
ただし、GetItemsFromEnum
メソッドで割り当てられた値が の文字列値ではなく、値[Flags]
になるように変更する必要がある場合、メソッドは機能しません。GetItemsFromEnum
enum
int
これは実際には 2 部構成です。
- from
enumValue
の値になるようにメソッドを変更するにはどうすればよいですか (つまり、「1 + 2」が選択されている場合 (2 つのチェック ボックス)、保存される値は「3」になります)。int
enum
[Flags]
int
- 最も重要なことは、メソッドにどのような種類のロジックを挿入すれば、他
enum
のすべての ( のないもの[Flags]
) が影響を受けない (つまり、引き続き を変換するToString
) ことができるかということです。私はいくつかのif ... else
論理を考えていましたが、それはうまくいきますか?