Ich habe enum so:
%Vor%Dann muss ich diese Enumeration in eine Zeichenfolge konvertieren. Jetzt mache ich das so:
%Vor%Ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, dies zu tun, ich suche nach einer guten Praxislösung.
BEARBEITEN : Es gibt kein Muster in der Ergebniszeichenfolge.
Vielen Dank im Voraus.
Ich verwende das Attribut [Description]
von System.ComponentModel
Beispiel:
%Vor%Dann, um davon zu lesen, mache ich
%Vor%Dann Verwendung
ReadDescription(RoleType.Guest);
Hinweis: Diese Lösung geht von einer einzelnen Kulturanwendung aus, da speziell zu mehreren Kulturen keine spezifischen Fragen gestellt wurden. Wenn Sie in einer Situation sind, in der Sie mehrere Kulturen bearbeiten müssen, verwende ich DescriptionAttribute
oder ähnlich, um einen Schlüssel in einer kultursensitiven Ressourcendatei zu speichern. Sie könnten das Enumerationselement direkt in der RESX-Datei speichern, die die engste mögliche Kopplung erzeugt. Ich sehe keinen Grund, warum Sie die internen Abläufe Ihrer Anwendung (die Namen der Aufzählungsmember) mit Schlüsselwerten verknüpfen möchten, die für die Internationalisierung existieren.
Wenn Sie eine benutzerdefinierte Zeichenfolge benötigen, ist die beste Option, ein Dictionary< ObjectTypes, string>
zu erstellen und nur eine Wörterbuchsuche durchzuführen.
Wenn Sie mit der Standardfunktion ToString () arbeiten, verwenden Sie einfach typeObj.ToString();
Für den Wörterbuchansatz könnten Sie Folgendes tun:
%Vor%Ihre Methode wird:
%Vor%Verwenden Sie den vorgeschlagenen Ressourcen-Weg:
%Vor%Fehlerbehandlung ist ein bisschen mehr ..
Ich habe einmal ein benutzerdefiniertes Attribut für die enum-Felder verwendet, die einen Zeichenfolgenparameter verwendet haben, und dann eine Funktion zum Extrahieren der Zeichenfolge geschrieben, wenn sie einen enum-Wert erhalten hat.
Wenn Sie einfach den Namen von enum (dh TypeOne) verwenden möchten, können Sie einfach ToString () für die Enumeration selbst
aufrufen %Vor%Wenn Sie eine benutzerdefinierte Zeichenfolge basierend auf dem Typ möchten, haben Sie mehrere verschiedene Optionen. Die switch-Anweisung, die Sie haben, ist in Ordnung, aber es wird unordentlich, wenn Sie eine große Anzahl von enums haben. Oder Sie könnten ein Dictionary einrichten, das den Enum-Typ als Schlüssel und die Zeichenfolge als Wert verwendet.
%Vor%Ich kann das nicht ganz glauben ... warum hat niemand eine Ressourcendatei vorgeschlagen?
Das Mappen von Enum-Werten zu Strings innerhalb von kompiliertem Code ist alles gut und gut als ein schneller Hack, aber auf lange Sicht ist es eine schlechte Übung und macht es schwierig, Code zu refaktorieren. Was passiert, wenn Sie einen Wert aus der Aufzählung hinzufügen (oder subtrahieren)? Wenn Sie Zeichenfolgen aus einer Ressourcendatei verwenden, müssen Sie nur einen Eintrag hinzufügen (oder entfernen).
Ich würde diese Werte in eine Datenbank setzen. Rollen gehören normalerweise aus verschiedenen Gründen in eine Datenbank:
Wenn es richtig gemacht wird, sollte die Leistung kein Problem sein, die Rollen von der Datenbank zu bekommen. Da sich eine Rollendefinitionstabelle nur selten ändert, ist sie außerdem ein sehr guter Kandidat für das Caching.
Wenn Sie sich bei einem Enum herumarbeiten müssen, um es zur Arbeit zu bringen, sollten Sie vielleicht kein Enum verwenden. Angesichts der richtigen Platzierung sollte alles viel besser in Code mit wenig oder keinen Hacks fließen. Zugegebene Enums haben ihren Platz; zum Beispiel ein eher statischer sich gegenseitig ausschließender Status.
Ich habe enum so:
%Vor%Dann muss ich diese Enumeration in eine Zeichenfolge konvertieren. Jetzt mache ich das so:
%Vor%Ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, dies zu tun, ich suche nach einer guten Praxislösung.
BEARBEITEN : Es gibt kein Muster in der Ergebniszeichenfolge.
Vielen Dank im Voraus.
Ich verwende das Attribut %code% von %code%
Beispiel:
%Vor%Dann, um davon zu lesen, mache ich
%Vor%Dann Verwendung
%code%
Hinweis: Diese Lösung geht von einer einzelnen Kulturanwendung aus, da speziell zu mehreren Kulturen keine spezifischen Fragen gestellt wurden. Wenn Sie in einer Situation sind, in der Sie mehrere Kulturen bearbeiten müssen, verwende ich %code% oder ähnlich, um einen Schlüssel in einer kultursensitiven Ressourcendatei zu speichern. Sie könnten das Enumerationselement direkt in der RESX-Datei speichern, die die engste mögliche Kopplung erzeugt. Ich sehe keinen Grund, warum Sie die internen Abläufe Ihrer Anwendung (die Namen der Aufzählungsmember) mit Schlüsselwerten verknüpfen möchten, die für die Internationalisierung existieren.
Ich denke, der einfachste Weg ist, eine Funktion zu haben, die zwischen dem Enum-Wert und dem bevorzugten Kurznamen abbildet und dann eine andere Funktion erzeugt, die die vollständige Nachricht erzeugt.
%Vor%Ich habe einmal ein benutzerdefiniertes Attribut für die enum-Felder verwendet, die einen Zeichenfolgenparameter verwendet haben, und dann eine Funktion zum Extrahieren der Zeichenfolge geschrieben, wenn sie einen enum-Wert erhalten hat.
Verwenden Sie den vorgeschlagenen Ressourcen-Weg:
%Vor%Fehlerbehandlung ist ein bisschen mehr ..
Wenn Sie einfach den Namen von enum (dh TypeOne) verwenden möchten, können Sie einfach ToString () für die Enumeration selbst
aufrufen %Vor%Wenn Sie eine benutzerdefinierte Zeichenfolge basierend auf dem Typ möchten, haben Sie mehrere verschiedene Optionen. Die switch-Anweisung, die Sie haben, ist in Ordnung, aber es wird unordentlich, wenn Sie eine große Anzahl von enums haben. Oder Sie könnten ein Dictionary einrichten, das den Enum-Typ als Schlüssel und die Zeichenfolge als Wert verwendet.
%Vor%Ich kann das nicht ganz glauben ... warum hat niemand eine Ressourcendatei vorgeschlagen?
Das Mappen von Enum-Werten zu Strings innerhalb von kompiliertem Code ist alles gut und gut als ein schneller Hack, aber auf lange Sicht ist es eine schlechte Übung und macht es schwierig, Code zu refaktorieren. Was passiert, wenn Sie einen Wert aus der Aufzählung hinzufügen (oder subtrahieren)? Wenn Sie Zeichenfolgen aus einer Ressourcendatei verwenden, müssen Sie nur einen Eintrag hinzufügen (oder entfernen).
Dies erfordert Refactoring, würde ich sagen.
Was Sie bereits benutzt haben, ist kein schlechtes Muster. Fast jede andere Option hat ihre eigenen Probleme. Wenn Sie F # für diesen Typ verwenden, können Sie Folgendes tun:
%Vor%Natürlich haben Sie mit dem F # -Mustervergleich viel mehr Kontrolle als mit einer einfachen C # -Schaltanweisung.
Wenn Sie eine benutzerdefinierte Zeichenfolge benötigen, ist die beste Option, ein %code% zu erstellen und nur eine Wörterbuchsuche durchzuführen.
Wenn Sie mit der Standardfunktion ToString () arbeiten, verwenden Sie einfach %code%
Für den Wörterbuchansatz könnten Sie Folgendes tun:
%Vor%Ihre Methode wird:
%Vor%Ich würde diese Werte in eine Datenbank setzen. Rollen gehören normalerweise aus verschiedenen Gründen in eine Datenbank:
Wenn es richtig gemacht wird, sollte die Leistung kein Problem sein, die Rollen von der Datenbank zu bekommen. Da sich eine Rollendefinitionstabelle nur selten ändert, ist sie außerdem ein sehr guter Kandidat für das Caching.
Wenn Sie sich bei einem Enum herumarbeiten müssen, um es zur Arbeit zu bringen, sollten Sie vielleicht kein Enum verwenden. Angesichts der richtigen Platzierung sollte alles viel besser in Code mit wenig oder keinen Hacks fließen. Zugegebene Enums haben ihren Platz; zum Beispiel ein eher statischer sich gegenseitig ausschließender Status.
Tags und Links c# design-patterns