请耐心等待,因为这对我来说是一个困难的概念。我有一个方法enum
以字符串形式返回项目(用于数据库存储)。这是方法:
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)
};
}
(注意:GetEnumDescription
是类中的另一种方法,它使[Display(Name="")
文本在 UI 中显示友好的内容。)
对于单个选择输入(单选按钮,下拉菜单),这很好用。但是,对于多选(列表框、复选框列表),我正在考虑使用该enum
[Flags]
属性作为int
.
但是,该GetItemsFromEnum
方法在我使用的情况下不起作用,[Flags]
并且需要我更改它,以便在GetItemsFromEnum
方法中分配的值不是 的字符串值enum
,而是int
值。
这实际上是一个两部分:
- 如何修改该方法,使其
enumValue
成为int
from的值enum
[Flags]
(即,如果选择“1 + 2”(两个复选框),则int
保存的值将是“3”)? - 最重要的是,我可以在方法中插入什么样的逻辑,以便我所有其他
enum
的(没有的[Flags]
)不受影响(即,它仍然转换ToString
)?我在想一些if ... else
逻辑,但这行得通吗?