2016-04-22 3 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

IsEnum является собственностью Type.

Если элемент действительно является типом, вы можете направить его на Type и получить его там.

+0

Спасибо! Я должен ждать 11 минут, чтобы принять ответ. – Quantic

1

Метод GetMembers в типе возвращает массив объектов MemberInfo. На каждом из них у вас есть MemberType. Используйте это, чтобы получить тип элемента. О типе члена вы можете свободно использовать проверку IsEnum.

Счастливое кодирование! :)

+0

OK Я вижу, что вы сейчас говорите. В этом случае и класс, и перечисление имеют 'MemberType' из' MemberTypes.NestedType', который говорит мне, что это «Тип», поэтому я могу * безопасно * передать его в «Тип» с этой информацией. Решение, которое я использую сейчас, использует 'if (member is Type) {((Type) member) .IsEnum ...}', но теперь я вижу, что могу использовать 'if (member.MemberType == MemberTypes.NestedType) { ((Тип)) .IsEnum ...} '. В конце концов, хотя мне просто не хватало факта, что мне нужно было набросить его на «Типа» в первую очередь. – Quantic

Смежные вопросы