请耐心等待,因为这对我来说是一个困难的概念。我有一个方法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成为intfrom的值enum[Flags](即,如果选择“1 + 2”(两个复选框),则int保存的值将是“3”)? - 最重要的是,我可以在方法中插入什么样的逻辑,以便我所有其他
enum的(没有的[Flags])不受影响(即,它仍然转换ToString)?我在想一些if ... else逻辑,但这行得通吗?