Teste se um objeto é um Enum

89

Eu gostaria de saber se 'theObject' é um enum (de qualquer tipo de enum)

 foreach (var item in Enum.GetValues(theObject.GetType())) {

     //do something
 }
Aran Mulholland
fonte

Respostas:

203

A pergunta é a resposta. :)

bool isEnum = theObject is Enum;
EMP
fonte
13
Adoro! E ainda mais perto da questão: if (theObject is Enum) {...}
Peter Lillevold
5
Não é nem para isso que vim aqui e estou te dando um ponto. É tão ... limpo ... <sniff>, é lindo homem TT
Lukas
12
/ * Test * / if (anObject is / * an * / Enum) {}
Tom Fobear
bool isEnum = theObject.GetType (). IsEnum; é melhor, Enum nem sempre retorna verdadeiro
chris hu
67

Se você tiver um Type, use a Type.IsEnumpropriedade, por exemplo:

bool isEnum = theObject.GetType().IsEnum;
Chris Schmich
fonte
2
Isso funcionou para mim. Não consegui descobrir como fazer a resposta aceita funcionar no VB.NET.
Shea Daniels
4
Na verdade, eu precisava saber como verificar se Typeera do tipo Enum. +1
Nathan
8

Apenas use

if (theObject is Enum)
 //is an enum
Laramie
fonte
0

Para parâmetros de tipo genérico, o parâmetro pode ser restringido em vez de testado:

where T : Enum
bugado 87
fonte