Frage

In .net 4.0 benutze ich System.Enum.GetValues(typeof(Gender)) Um die Liste des Enum -Elements zu erhalten.
In einem vollständigen Beispiel suche ich auf diese Weise nach Enum -Wert:

    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;
        }
    }  

Aber wie könnte ich das in .NET 3.5 (Pocket PC) machen?
Danke im Voraus !

Ich benutze die Antworten unten, aber es funktioniert nicht für mich. Hier ist der Code:

Enum -Werte:

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,
    }
}  

Verwendungszweck:

Ich vermisse es einfach, neues Objekt zu initialisieren. Das funktioniert jetzt:

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;
}
War es hilfreich?

Lösung

Es gibt einen Blog -Beitrag hier (archiviert hier) was es durch Reflexion erreicht:

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;
}

Andere Tipps

Zusätzlich zur Antwort von Shamp00 würde ich empfehlen, eine statische Methode mit einem generischen Typparameter zu erstellen. Auf diese Weise müssen Sie keine Variable des Enum -Typs an die Methode übergeben:

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

Normalerweise mag ich keine Klassen, die mit "Helfer" endet, sondern nur mit einfach Enum würde mit dem eingebauten Konflikt in Konflikt stehen Enum-Klasse.

Um diese Methode zu verwenden, rufen Sie sie einfach mit Ihrem Enum -Typ auf:

var values = EnumHelper.GetValues<MyEnum>();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top