查找枚举类型的成员

3
我希望你能帮我做一些类似于这样的事情。
var membersOfTypeEnum =  typeof(myType).GetMembers().Where(i => i.IsEnum);

然而,在上述的模拟中,i 的类型为 MemberInfo,并且没有实现 IsEnum

GetType(i).Name 返回 RuntimeType,它是反映类型,包含了真正的类型(我想),但我找不到一种方法来获取成员本身的类型。

那么,如何找到指定类型的成员(这些成员是枚举)?

编辑,假设我要反射这个类型:

public static class MyType
{
    public enum EnumMember
    {
        One = 1,
        Two = 2,
    }

   public static string NotEnumMember = "this is a string";
}

你的意思是“成员”指的是字段吗?因为方法和属性不能是枚举类型,只能返回一个枚举。 - Ilya Ivanov
@IlyaIvanov 我的意思是 GetMembers 返回的任何内容。GetFields() 不会返回在类中定义的枚举,GetProperties 也不会。它们也不算真正的方法,就我所知,它们只是“成员”。 - Toodleey
Members 是字段,方法和属性的概括。GetMembers 返回它们全部。你需要什么?我不明白方法和属性怎么会是枚举类型的。 - Ilya Ivanov
1
@Toodleey 枚举包装在其中不是成员。 - Daniel A. White
@IlyaIvanov 我已经编辑了问题,加入了一个我想要从中提取枚举的示例类。EnumMember不属于GetMethods(),GetProperties()或GetFields()的一部分,但它是GetMembers()的一部分。 - Toodleey
2个回答

8
使用GetNestedTypes方法获取所有嵌套类型,然后检查是否为枚举类型。
typeof(MyType)
    .GetNestedTypes()
    .Where(type => type.IsEnum)

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接