Konvertieren von Enum-Sammlung zum Wörterbuch Angegebenen Typ
Ich bin auf der Suche um eine Funktion erstellen, wandelt ein Enum an eine Wörterbuch-Liste. Die Enum-Namen werden auch umgewandelt in eine besser lesbare form. Ich möchte nur noch die Funktion aufrufen, geben Sie den enum-Typ und Holen das Wörterbuch zurück. Ich glaube ich bin fast da ich kann einfach nicht scheinen, um herauszufinden, wie zu werfen, den enum um den richtigen Typ. (Immer ein Fehler auf " returnList.Hinzufügen' - Zeile). Im Moment bin ich gerade mit var für den Typ, aber ich weiß die Art, wie es übergeben wird.
internal static Dictionary<int,string> GetEnumList(Type e)
{
List<string> exclusionList =
new List<string> {"exclude"};
Dictionary<int,string> returnList = new Dictionary<int, string>();
foreach (var en in Enum.GetValues(e))
{
//split if necessary
string[] textArray = en.ToString().Split('_');
for (int i=0; i< textArray.Length; i++)
{
//if not in the exclusion list
if (!exclusionList
.Any(x => x.Equals(textArray[i],
StringComparison.OrdinalIgnoreCase)))
{
textArray[i] = Thread.CurrentThread.CurrentCulture.TextInfo
.ToTitleCase(textArray[i].ToLower());
}
}
returnList.Add((int)en, String.Join(" ", textArray));
}
return returnList;
}
- Welche Fehler sind Sie immer?
- Wahrscheinlich casting-Objekt int löst einen Fehler aus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können generische Methode, die schaffen Wörterbuch mit enum-Werte und-Namen:
Fühlen Sie sich frei, zu ändern, Standard-enum-Namen, wie Sie benötigen. Verwendung:
enum
generische Einschränkung möglich .NET ...if(!(T is System.Enum))
? Gibt es irgendeinen Vorteil der Verwendung vonType.IsEnum
statt?where T : !enum
kann in.NET 8
?is
BetreiberEiniger Zeit ist der bessere Weg für enum nutzen, mit Beschreibung, und erhalten Sie Dictonary(EnumValue, EnumValueDescription) über die Allgemeine Methode. Ich benutze es, wenn ich brauche, Ansicht filter im dropdown-Menü.
Sie können es verwenden, für alle Enumerationen, die in eurem code.
Beispiel:
Und Aufruf sieht wie folgt aus:
Für enum:
Bitte beachten Sie, dass die definierten Datentypen mit enum in C# kann eine Reihe von zugrunde liegenden Typen (byte, sbyte, short, ushort, int, uint, long, ulong), wie der doc sagt: enum. Dies bedeutet, dass nicht alle enum-Werte kann sicher zu int gecastet und bekommen Sie Weg, ohne eine Ausnahme ausgelöst wird.
Wenn Sie zum Beispiel möchten, Sie verallgemeinern, Sie können sicher geben Sie alle enum-Werte zu schweben (obwohl seltsam, es umfasst alle enum zugrunde liegenden Typ wie der Implizite Numerische Konvertierungen Tabelle erzählt). Oder Sie können eine konkrete Anfrage zugrunde liegenden Typ über Generika.
Weder Lösung ist perfekt, obwohl beide den job zu erledigen Sie sicher mit ausreichende überprüfung der parameter. Verallgemeinerung auf float-Werte Lösung:
Generischen parameter Lösung:
Oder Sie können verwenden Sie diese in Kombination mit lazyberezovsky die Lösung zur Vermeidung von null-check. Oder besser die Lösungen mithilfe der impliziten Konvertierungen (sagen wir, du hast ein enum mit den zugrunde liegenden Typ char, können Sie sicher konvertieren eines char in einen int bedeutet, dass die Methode, wenn requrested zurück ein Wörterbuch mit int-Schlüssel, die enum-Werte mit einer enum die zugrunde liegenden Typ ist char, sollte arbeiten, ohne ein problem, da gibt es kein problem in die Speicherung von char auf int).