¿Cómo comprobar si una enumeración contiene un número?


79

Tengo un Enum como este:

 public enum PromotionTypes
{
    Unspecified = 0, 
    InternalEvent = 1,
    ExternalEvent = 2,
    GeneralMailing = 3,  
    VisitBased = 4,
    PlayerIntroduction = 5,
    Hospitality = 6
}

Quiero comprobar si este Enum contiene un número que doy. Por ejemplo: cuando doy 4, Enum contiene eso, así que quiero devolver True, si doy 7, no hay 7 en esta Enum, por lo que devuelve False. Probé Enum.IsDefine pero solo verifica el valor de String. ¿Cómo puedo hacer eso?


Posible duplicado de Validate Enum Values
azulado

Respuestas:


180

El IsDefinedmétodo requiere dos parámetros . El primer parámetro es el tipo de enumeración que se debe verificar . Este tipo se suele obtener mediante una expresión de tipo. El segundo parámetro se define como un objeto básico . Se utiliza para especificar el valor entero o una cadena que contiene el nombre de la constante a buscar. El valor de retorno es un booleano que es verdadero si el valor existe y falso si no.

enum Status
{
    OK = 0,
    Warning = 64,
    Error = 256
}

static void Main(string[] args)
{
    bool exists;

    // Testing for Integer Values
    exists = Enum.IsDefined(typeof(Status), 0);     // exists = true
    exists = Enum.IsDefined(typeof(Status), 1);     // exists = false

    // Testing for Constant Names
    exists = Enum.IsDefined(typeof(Status), "OK");      // exists = true
    exists = Enum.IsDefined(typeof(Status), "NotOK");   // exists = false
}

FUENTE


8

Prueba esto:

IEnumerable<int> values = Enum.GetValues(typeof(PromotionTypes))
                              .OfType<PromotionTypes>()
                              .Select(s => (int)s);
if(values.Contains(yournumber))
{
      //...
}

7

Deberías usar Enum.IsDefined.

Probé Enum.IsDefine pero solo verifica el valor de String.

Estoy 100% seguro de que verificará tanto el valor de la cadena como el valor int (el subyacente), al menos en mi máquina.


1
Gracias, son mis errores, olvidé convertir la cadena a Int, por lo que Enum.isDefined siempre se vuelve falso cuando di el número correcto.
Jack Zhang

Definitivamente puede tomar la (representación de cadena que distingue entre mayúsculas y minúsculas); consulte los documentos o la fuente para obtener más información.
Wai Ha Lee

4

Tal vez desee verificar y usar la enumeración del valor de la cadena:

string strType;
if(Enum.TryParse(strType, out MyEnum myEnum))
{
    // use myEnum
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.