从属性创建枚举
问题描述:
我用自己的实体属性标记我的枚举,该属性用于将枚举映射到案例管理系统中相应的字段。从属性创建枚举
从枚举值获取正确的字符串工作正常,但我怎么能从一个字符串生成枚举?
我开始这样做:
foreach (var fieldInfo in enumType.GetFields())
{
var attribute = (EntityNameAttribute)fieldInfo
.GetCustomAttributes(typeof (EntityNameAttribute), false)
.FirstOrDefault();
if (attribute == null)
continue;
if (attribute.Name != name)
continue;
//got a match. But now what?
}
但是我如何才能从一个字段的正确值?我可以使用fieldInfo.GetValue
吗?如果是这样,我应该使用什么样的实例?应该将枚举视为静态类型吗?
答
是的,你可以使用:
object value = fieldInfo.GetValue(null);
他们只是静态的只读字段,有效。请注意,不是从字符串获得枚举...但如果您做需要做到这一点,您可以使用Enum.Parse
。
需要注意的一点 - 如果你正在使用.NET 3.5,你的整个代码可以使用LINQ可以简化:
var values = from field in enumType.GetFields()
from EntityNameAttribute attribute in
field.GetCustomAttributes((typeof(EntityNameAttribute), false)
where attribute.Name == name
select field.GetValue(null);
(这是假设,如果有定义了正确类型的多个属性,你不在乎哪一个具有正确的名称,只有一个将有正确的名称)
答
是的,它可以被当作一个静态类型:
string enumString = fieldInfo.GetValue(null).ToString();
将工作
不明白你的意思*“生成字符串的枚举”*。你的意思是说''红色=> Color.Red'有任何机会吗? –
@MunimAbdul:在另一个系统中,一个状态可以被命名为“01 - Planning”,这意味着我在我的枚举中获得了'[EntityName(“01 - Planning”)] Planning = 1,'作为一个字段。 – jgauffin