Meine erste Frage: Haben Sie Zugriff auf die Datenbank selbst? Dies sollte idealerweise in der Datenbank normalisiert werden, da sonst jede Lösung fehleranfällig ist. Meiner Erfahrung nach neigen Datenfelder voller "OEM" und "CMB" dazu, im Laufe der Zeit Dinge wie "oem" und andere "Scheißdaten" zu enthalten.... Wenn Sie die Daten normalisieren können, können Sie den Schlüssel in der Tabelle, die die Elemente enthält, als Ihre Enum verwenden, und schon haben Sie eine viel sauberere Struktur.
Wenn das nicht verfügbar ist, würde ich Ihre Enum machen, und machen Sie eine Klasse, um Ihre Zeichenfolge in die Enum für Sie zu parsen. Dies würde Ihnen zumindest eine gewisse Flexibilität bei der Behandlung von Nicht-Standard-Einträge und viel mehr Flexibilität für Trapping oder Behandlung von Fehlern als tun eine der Workarounds mit Enum.Parse/Reflection/etc. Ein Wörterbuch würde funktionieren, könnte aber zusammenbrechen, wenn Sie jemals Probleme mit Groß- und Kleinschreibung usw. haben.
Ich würde empfehlen, eine Klasse zu schreiben, damit Sie das tun können:
// I renamed this to GroupType, since it sounds like each element has a single type...
GroupType theType = GroupTypeParser.GetGroupType(theDBString);
Dadurch bleibt die Lesbarkeit weitgehend erhalten, ohne dass der DB geändert werden muss.
1 Stimmen
Mögliche Duplikate von Enum ToString
24 Stimmen
Ich bin mir nicht sicher, warum die meisten Antworten nicht einfach "const string" verwenden und stattdessen eigene Klassen erstellen.
2 Stimmen
Sie können zwar keine Zeichenketten verwenden, aber Sie können sehr wohl Zeichenketten verwenden. Das ist eine Option, wenn Sie Werte mit nur einem Buchstaben verwenden können.
2 Stimmen
Ich bin wirklich verwirrt, warum die oben von CTS_AE vorgeschlagene Lösung nicht einmal unter den ersten drei Antworten ist.
0 Stimmen
@Sinjai Die explizite Gruppierung zusammengehöriger Werte wiegt den Nachteil eines unmerklichen Leistungsverlusts auf, insbesondere bei einer API oder einer wiederverwendbaren Komponente.
0 Stimmen
Ich bin verwirrt. Während das Erstellen einer benutzerdefinierten Klasse, wie in der vorgeschlagenen Antwort vorgeschlagen, funktioniert, bin ich der Meinung, dass eine
const string
scheint der eigentliche Kandidat für dieses Problem zu sein. Ich würde es einfach halten.6 Stimmen
@Sau001 / CTS_AE - wollte dies hier anbringen, da diese Kommentare ganz oben stehen und man ein wenig scrollen muss, um die Antwort zu finden. Siehe den Kommentar von Pharap zu dieser Antwort: stackoverflow.com/a/5674697/5948647 . Statische Klassen können nicht als Methodenparametertypen verwendet werden, so dass Sie die Verwendung einer Ihrer vordefinierten konstanten Zeichenketten in Methoden nicht erzwingen können.