【发布时间】:2013-01-03 13:20:34
【问题描述】:
请耐心等待,因为这对我来说是一个困难的概念。我有一个方法可以将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的值来自enum[Flags](即,如果选择了“1 + 2” (两个复选框),那么保存的int值将是“3”)? - 最重要的是,我可以在方法中插入什么样的逻辑
这样我所有的其他
enum(没有[Flags])都不是 受影响(即,它仍然转换ToString)?我在想一些if ... else的逻辑,但是这样行吗?
【问题讨论】:
标签: c# asp.net-mvc enums