60 votes

C # enum contient value

J'ai un enum

 enum myEnum2 { ab, st, top, under, below}
 

Je voudrais écrire une fonction pour tester si une valeur donnée est incluse dans myEnum

quelque chose comme ca:

 private bool EnumContainValue(Enum myEnum, string myValue)
{
     return Enum.GetValues(typeof(myEnum))
                .ToString().ToUpper().Contains(myValue.ToUpper()); 
}
 

Mais cela ne fonctionne pas car le paramètre myEnum n'est pas reconnu.

90voto

Sergey Berezovskiy Points 102044

Pourquoi ne pas utiliser

 Enum.IsDefined(typeof(myEnum), value);
 

En passant, il est agréable de créer la classe générique Enum<T> , qui englobe les appels à Enum (en fait, je me demande pourquoi une telle chose n'a pas été ajoutée à Framework 2.0 ou version ultérieure):

 public static class Enum<T>
{
    public static bool IsDefined(string name)
    {
        return Enum.IsDefined(typeof(T), name);
    }

    public static bool IsDefined(T value)
    {
        return Enum.IsDefined(typeof(T), value);
    }

    public static IEnumerable<T> GetValues()
    {
        return Enum.GetValues(typeof(T)).Cast<T>();
    }
    // etc
}
 

Cela permet d’éviter tout cela typeof et d’utiliser des valeurs fortement typées:

 Enum<StringSplitOptions>.IsDefined("None")
 

46voto

LightStriker Points 4684

Pas besoin d'écrire le vôtre:

     // Summary:
    //     Returns an indication whether a constant with a specified value exists in
    //     a specified enumeration.
    //
    // Parameters:
    //   enumType:
    //     An enumeration type.
    //
    //   value:
    //     The value or name of a constant in enumType.
    //
    // Returns:
    //     true if a constant in enumType has a value equal to value; otherwise, false.

    public static bool IsDefined(Type enumType, object value);
 

Exemple:

 if (System.Enum.IsDefined(MyEnumType, MyValue))
{
    // Do something
}
 

10voto

Pranay Rana Points 69934

juste utiliser cette méthode

Enum.IsDefined, méthode - Retourne une indication indiquant si une constante avec une valeur spécifiée existe dans une énumération spécifiée

Exemple

 enum myEnum2 { ab, st, top, under, below};
myEnum2 value = myEnum2.ab;
 Console.WriteLine("{0:D} Exists: {1}", 
                        value, myEnum2.IsDefined(typeof(myEnum2), value));
 

2voto

   public static T ConvertToEnum<T>(this string value)
    {
        if (typeof(T).BaseType != typeof(Enum))
        {
            throw new InvalidCastException("The specified object is not an enum.");
        }
        if (Enum.IsDefined(typeof(T), value.ToUpper()) == false)
        {
            throw new InvalidCastException("The parameter value doesn't exist in the specified enum.");
        }
        return (T)Enum.Parse(typeof(T), value.ToUpper());
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X