从属性创建枚举

jga*_*fin 2 c# reflection enums

我正在使用自己的实体属性标记我的枚举,用于将枚举映射到案例管理系统中的相应字段.

从枚举值中获取正确的字符串工作正常,但如何从字符串生成枚举?

我开始这样做:

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?
}
Run Code Online (Sandbox Code Playgroud)

但是我如何从一个领域获得适当的价值呢?我可以用fieldInfo.GetValue吗?如果是这样,我应该使用什么实例?枚举应该被视为静态类型吗?

Jon*_*eet 5

是的,你可以使用:

object value = fieldInfo.GetValue(null);
Run Code Online (Sandbox Code Playgroud)

它们只是静态只读字段,有效.请注意,这不是从字符串获取枚举...但如果您确实需要这样做,您可以使用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);
Run Code Online (Sandbox Code Playgroud)

(这是假设,如果有定义正确类型的多个属性,你不在乎哪一个具有正确的名称,只有一个具有正确的名称.)