2016-04-22 92 views
0

我发现我可以使用GetMembers()来返回类的成员,但我只想返回枚举成员。在调试过程中,我可以将鼠标悬停在member上,并看到一个IsEnum属性为true,但我似乎无法在代码中找到它。如何确定类型成员是枚举?

我只想在以下代码中打印IAmAnEnum。目前代码将同时打印IAmAnEnum以及IAmAClass

static void Main(string[] args) 
{ 
    foreach (var member in typeof(Test).GetMembers()) 
    { 
     //if (member.IsEnum) // <-- Compile error 
     //{ 
     Console.WriteLine(member.Name); 
     //} 
    } 

    Console.Read(); 
} 

public class Test 
{ 
    public enum IAmAnEnum 
    { 

    } 

    public class IAmAClass 
    { 

    } 
} 

回答

2

IsEnumType的财产。

如果该成员实际上是一个类型,则可以将其转换成Type并获得该属性。

+0

谢谢!我必须等待11分钟才能接受答案。 – Quantic

1

Type的GetMembers方法返回MemberInfo对象的数组。 在它们中的每一个上,都有一个MemberType属性。 使用此来获取成员的类型。 在成员的类型上,您可以自由使用IsEnum检查。

快乐编码! :)

+0

好吧,我明白你现在在说什么。在这种情况下,类和枚举都有'MemberType'成员类型.NestedType',它告诉我它是一个'Type',所以我可以*安全地*将它转换为带有这些信息的'Type'。我现在使用的解决方案使用'if(member is Type){((Type)member).IsEnum ...}',但现在我看到我可以使用if(member.MemberType == MemberTypes.NestedType){ ((类型)成员).IsEnum ...}'。最后,尽管我只是错过了我需要将它首先投入到“Type”的事实。 – Quantic