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吗?如果是这样,我应该使用什么实例?枚举应该被视为静态类型吗?
是的,你可以使用:
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)
(这是假设,如果有是定义正确类型的多个属性,你不在乎哪一个具有正确的名称,只有一个会具有正确的名称.)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |