Compruebe que el tipo entero pertenece al miembro de la enumeración

Quiero verificar que algún tipo de entero pertenezca a un miembro de enumeración.

Por ejemplo,

public enum Enum1 { member1 = 4, member2 = 5, member3 = 9, member4 = 0 } 

Enum1 e1 = (Enum1) 4 me da member1

Enum1 e2 = (Enum1) 10 no me da nada y quiero comprobarlo.

Utilice Enum.IsDefined

 Enum.IsDefined(typeof(Enum1), 4) == true 

pero

 Enum.IsDefined(typeof(Enum1), 1) == false 

Como dice Sam, puedes usar IsDefined. Aunque esto es un poco incómodo. Si lo desea, puede consultar mi biblioteca de melodía sin restricciones que nos permitiría:

 Enum1 e2 = (Enum1)10; if (e2.IsNamedValue()) // Will return false { } 

Probablemente no valga la pena para una sola llamada de enumeración, pero si estás haciendo muchas cosas con enumeraciones, es posible que encuentres algunas cosas útiles allí.

Debería ser más rápido que Enum.IsDefined cierto. En este momento solo realiza un escaneo lineal, pero avíseme si necesita mejorarlo 🙂 (La mayoría de las enumeraciones son lo suficientemente pequeñas como para que probablemente no se beneficien con un HashSet , pero podríamos hacer una búsqueda binaria … )

 int testNum = 5; bool isMember = Enum.GetValues(typeof(Enum1)).Cast().Any(x => x == testNum); 

Revisa los valores de la enumeración y los compara con el entero.

  static bool EnumTest(int testVal, Enum e) { bool result = false; foreach (var val in Enum.GetValues(typeof(Enum1))) { if ((int)val == testVal) { result = true; break; } } return result; } 

Edición : Parece que Sam tiene una mejor solución .

Puede usar Enum.GetValues ​​para obtener todos los valores definidos. A continuación, compruebe si su valor existe en esa lista.
http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx