我正在编写一个扩展来获取Enum
的描述和其他属性。
我看过使用FieldInfo
和其他人使用MemberInfo
的示例。有人可以解释一下我们应该使用哪种差异以及何时会产生差异?
答案 0 :(得分:4)
MemberInfo
是FieldInfo
和PropertyInfo
的抽象基类。因此,当您想要使用FieldInfo
访问字段时,对于属性需要PropertyInfo
。
编辑:要在枚举值上设置属性,可以使用:
var attr = typeof(MyEnum).GetField(myEnumValue.ToString()).GetCustomAttributes(typeof(Description), false);
if (attr.Length > 0) return attr[0].Description;
在这种情况下,您也可以使用GetMember
代替GetField
,GetCustomAttributes
定义了MemberInfo
,因此FieldInfo
和{{1}都提供了PropertyInfo
}}。
答案 1 :(得分:4)
FieldInfo 类派生自 MemberInfo 类,它具有仅针对字段的其他方法/属性。 MemberInfo 类更通用,它可以描述构造函数,属性,方法,事件而不仅仅是字段。
我假设有些人根据要求使用 FieldInfo 和一些 MemberInfo 。在某些情况下, MemberInfo 提供的信息已足够,有些则不然。