Wie kann ich in .NET 3.5 aufgeben.
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;
}
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
System.Enum.GetValues
wird nicht auf .NET CF 3.5 unterstützt.
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>();