これは私にとって難しい概念なので、我慢してください。アイテムを文字列として返すメソッドがあり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]になるように変更する必要がある場合、メソッドは機能しません。GetItemsFromEnumenumint
これは実際には 2 部構成です。
- from
enumValueの値になるようにメソッドを変更するにはどうすればよいですか (つまり、「1 + 2」が選択されている場合 (2 つのチェック ボックス)、保存される値は「3」になります)。intenum[Flags]int - 最も重要なことは、メソッドにどのような種類のロジックを挿入すれば、他
enumのすべての ( のないもの[Flags]) が影響を受けない (つまり、引き続き を変換するToString) ことができるかということです。私はいくつかのif ... else論理を考えていましたが、それはうまくいきますか?