Drei Möglichkeiten:
Enum.GetValues(type)
// Seit .NET 1.1, nicht in Silverlight oder .NET Compact Framework
type.GetEnumValues()
// Nur unter .NET 4 und höher
type.GetFields().Where(x => x.IsLiteral).Select(x => x.GetValue(null))
// Funktioniert überall
Ich bin nicht sicher, warum GetEnumValues
wurde für Typ-Instanzen eingeführt. Das ist für mich nicht sehr lesbar.
Mit einer Hilfsklasse wie Enum<T>
ist das, was für mich am lesbarsten und einprägsamsten ist:
public static class Enum<T> where T : struct, IComparable, IFormattable, IConvertible
{
public static IEnumerable<T> GetValues()
{
return (T[])Enum.GetValues(typeof(T));
}
public static IEnumerable<string> GetNames()
{
return Enum.GetNames(typeof(T));
}
}
Jetzt rufen Sie an:
Enum<Suit>.GetValues();
// Or
Enum.GetValues(typeof(Suit)); // Pretty consistent style
Man kann auch eine Art Zwischenspeicherung verwenden, wenn die Leistung wichtig ist, aber ich erwarte nicht, dass dies ein Problem darstellt.
public static class Enum<T> where T : struct, IComparable, IFormattable, IConvertible
{
// Lazily loaded
static T[] values;
static string[] names;
public static IEnumerable<T> GetValues()
{
return values ?? (values = (T[])Enum.GetValues(typeof(T)));
}
public static IEnumerable<string> GetNames()
{
return names ?? (names = Enum.GetNames(typeof(T)));
}
}
24 Stimmen
Siehe auch ... stackoverflow.com/questions/972307/
6 Stimmen
Vielleicht möchten Sie sich informieren über die Besonderheiten von C#-Enums in dem dies und andere nützliche Informationen über Enum erörtert werden