Sie können zwei Enums verwenden. Eine für die Datenbank und die andere für die Lesbarkeit.
Man muss nur dafür sorgen, dass sie synchron bleiben, und das scheint ein geringer Aufwand zu sein. Sie müssen die Werte nicht festlegen, sondern nur die Positionen gleich setzen, aber durch das Festlegen der Werte wird deutlich, dass die beiden Enums miteinander verbunden sind, und es werden Fehler durch das Umordnen der Enum-Mitglieder verhindert. Und ein Kommentar lässt das Wartungsteam wissen, dass diese zusammenhängen und synchron gehalten werden müssen.
// keep in sync with GroupTypes
public enum GroupTypeCodes
{
OEM,
CMB
}
// keep in sync with GroupTypesCodes
public enum GroupTypes
{
TheGroup = GroupTypeCodes.OEM,
TheOtherGroup = GroupTypeCodes.CMB
}
Um ihn zu verwenden, müssen Sie ihn zunächst in den Code umwandeln:
GroupTypes myGroupType = GroupTypes.TheGroup;
string valueToSaveIntoDatabase = ((GroupTypeCodes)myGroupType).ToString();
Wenn Sie es noch bequemer machen wollen, können Sie eine Erweiterungsfunktion hinzufügen, die nur für diese Art von Enum funktioniert:
public static string ToString(this GroupTypes source)
{
return ((GroupTypeCodes)source).ToString();
}
und Sie können dann einfach tun:
GroupTypes myGroupType = GroupTypes.TheGroup;
string valueToSaveIntoDatabase = myGroupType.ToString();
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.