2016-04-22 21 views
0

GetMembers()を使ってクラスのメンバーを返すことができましたが、enumメンバーだけを返したいと思います。デバッグ中にmemberをホバーし、のプロパティー(true)を参照してください。ただし、コードで取得できないようです。typeメンバーが列挙型かどうかを調べるにはどうすればよいですか?

IAmAnEnumのみを次のコードで印刷したいと思います。現在、コードはIAmAnEnumIAmAClassの両方を印刷します。

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

OKあなたは今何を言っているのか分かります。この場合、クラスと列挙型の両方は 'MemberType'の' MemberType'を持っています。これは 'Type'です。それを' Type'にキャストすることができます。私が使用している解決策は 'if(member(Type)member)。({(Type)member} .IsEnum ...}'を使用していますが、 'if(member.MemberType == MemberTypes.NestedType){ ((Type)メンバ).IsEnum ...} '。結局のところ、私は最初にType型にキャストする必要があったという事実を見逃していました。 – Quantic

関連する問題