Question

Dans .Net 4.0, j'utilise System.Enum.GetValues(typeof(Gender)) pour obtenir la liste des élément ENUM.
Dans un exemple complet, j'utilise pour rechercher la valeur enum de cette façon:

    Gender retVal = Gender.Male;

    foreach (Gender enumType in System.Enum.GetValues(typeof(Gender)))
    {
        if (enumType.ToString().Trim().ToUpper().Substring(0,1).Equals(stringToEnum.Trim().ToUpper()))
        {
            retVal = enumType;
            break;
        }
    }  

Mais comment pourrais-je le faire en .Net 3.5 (Pocket PC)?
Merci d'avance !

J'utilise les réponses ci-dessous, mais il ne fonctionne pas pour moi. Voici le code:

Enum Valeurs:

namespace Ionic.Zlib
{
    public enum CompressionLevel
    {
        Level0 = 0,
        None = 0,
        Level1 = 1,
        BestSpeed = 1,
        Level2 = 2,
        Level3 = 3,
        Level4 = 4,
        Level5 = 5,
        Level6 = 6,
        Default = 6,
        Level7 = 7,
        Level8 = 8,
        BestCompression = 9,
        Level9 = 9,
    }
}  

Utilisation:

Je manque juste pour initialiser nouvel objet. Cela fonctionne maintenant:

public static Ionic.Zlib.CompressionLevel GetCompressionLevel(string Expression)
{
    Ionic.Zlib.CompressionLevel result = Ionic.Zlib.CompressionLevel.None;
    foreach (Ionic.Zlib.CompressionLevel item in EnumGetValues(new Ionic.Zlib.CompressionLevel()))
    {
        if(object.Equals(item.ToString().Trim().ToUpper(), Expression.Trim().ToUpper()))
        {
            result = item;
            break;
        }
    }
    return result;
}
Était-ce utile?

La solution

Il y a un blog post (archivée < a href = "https://web.archive.org/web/20100530072822/http://ideas.dalezak.ca/2008/11/enumgetvalues-in-compact-framework.html" rel = "nofollow"> ici ) qu'elle réalise par réflexion:

public IEnumerable<Enum> GetValues(Enum enumeration)
{
    List<Enum> enumerations = new List<Enum>();
    foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
    {
        enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
    }
    return enumerations;
}

Autres conseils

System.Enum.GetValues n'est pas pris en charge sur CF .NET 3.5, vous devriez trouver un moyen d'itérer sur votre ENUM, par exemple un coup d'oeil ici:

http: / /social.msdn.microsoft.com/forums/en-US/netfxcompact/thread/dbb6c1ff-935a-4fba-84a2-4cb6e892a61f/

En plus de la réponse de shamp00 Je suggère de créer une méthode statique avec un paramètre de type générique. De cette façon, vous n'avez pas besoin de passer une variable de type ENUM à la méthode:

public static class EnumHelper
{
    public static TEnum[] GetValues<TEnum>()
    {
        return typeof(TEnum)
            .GetFields(BindingFlags.Static | BindingFlags.Public)
            .Select(fieldInfo => (TEnum)fieldInfo.GetValue(null))
            .ToArray();
    }
}

En général, je ne suis pas comme la classe se terminant le « aide », mais en utilisant seulement Enum serait en conflit avec le haut-Enum classe.

Pour utiliser cette méthode avec juste Invoke votre type ENUM:

var values = EnumHelper.GetValues<MyEnum>();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top