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?
Respuestas:
El
IsDefined
mé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
fuente
Prueba esto:
IEnumerable<int> values = Enum.GetValues(typeof(PromotionTypes)) .OfType<PromotionTypes>() .Select(s => (int)s); if(values.Contains(yournumber)) { //... }
fuente
Deberías usar
Enum.IsDefined
.Estoy 100% seguro de que verificará tanto el valor de la cadena como el valor int (el subyacente), al menos en mi máquina.
fuente
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 }
fuente