我正在使用自己的实体属性标记我的枚举,用于将枚举映射到案例管理系统中的相应字段。
从枚举值中获取正确的字符串工作正常,但如何从字符串生成枚举?
我开始这样做:
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
吗?如果是这样,我应该使用什么实例?枚举应该被视为静态类型吗?
答案 0 :(得分:5)
是的,您可以使用:
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);
(假设如果 定义了正确类型的多个属性,则不关心哪个属性具有正确的名称,并且只有一个将具有正确的名字。)
答案 1 :(得分:1)
是的,它可以被视为静态类型:
string enumString = fieldInfo.GetValue(null).ToString();
将起作用