类型.GetMember只能从enum中获取成员,不能从object中获取成员

本文关键字:获取 成员 object 不能 enum GetMember 类型 | 更新日期: 2023-09-27 18:11:36

我使用Type.GetMember来获取enum成员。当枚举值为Equals时。它返回从对象继承的Equals方法。那么我怎么能只检索enum成员而不检索object的成员呢?

Enum

enum MyEnum{
 Equals,
 NotEquals
}
MemberInfo[] member = typeof(MyEnum).GetMember("Equals"); 
//Returns both Equals method from object and also the member from enum.

那么我怎么能从enum单独得到Equals呢?

类型.GetMember只能从enum中获取成员,不能从object中获取成员

你需要使用一个绑定标志:

MemberInfo[] member = typeof(MyEnum).GetMember("Equals", BindingFlags.DeclaredOnly); 

或者直接使用GetField:

FieldInfo member = typeof(MyEnum).GetField(BindingFlags.Static | BindingFlags.Public);

您可以使用bindingflag DeclaredOnly

MemberInfo[] member = typeof(MyEnum).GetMember("Equals", BindingFlags.DeclaredOnly);

From msdn (DeclaredOnly):

指定只考虑在所提供类型的层次结构级别上声明的成员。不考虑继承的成员。

为什么不能直接使用

Enum.Parse(typeof(MyEnum), "Equals");

如果我理解正确的话。