Was ist die Best Practice-Methode zum Konvertieren von enum in string?

8

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.

    
Dariusz 31.03.2010, 21:57
quelle

10 Antworten

19

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.

    
Chris Marisic 31.03.2010, 22:00
quelle
9

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%     
Reed Copsey 31.03.2010 22:00
quelle
4

Verwenden Sie den vorgeschlagenen Ressourcen-Weg:

%Vor%

Fehlerbehandlung ist ein bisschen mehr ..

    
Pasi Savolainen 31.03.2010 22:36
quelle
2

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%     
JaredPar 31.03.2010 21:59
quelle
1

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.

    
Matti Virkkunen 31.03.2010 22:01
quelle
1

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%     
Justin 31.03.2010 22:14
quelle
1

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).

    
slugster 31.03.2010 22:23
quelle
1

Ich würde diese Werte in eine Datenbank setzen. Rollen gehören normalerweise aus verschiedenen Gründen in eine Datenbank:

  1. Berichte müssen möglicherweise für die Rollen ausgeführt werden, daher müssen die Beschreibungen angezeigt werden.
  2. Rollendefinitionen können ohne Bereitstellung von neuem Code konfiguriert werden.
  3. Rollen sollten mit einer Schlüsseleinschränkung erzwungen werden.

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.

    
Bill Simpkins 18.01.2011 18:01
quelle
0

Dies erfordert Refactoring, würde ich sagen.

Ersetzen Sie den Typcode durch die Klasse

    
David Hedlund 31.03.2010 22:02
quelle
0
___ qstntxt ___

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.

    
___ answer2556774 ___

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.

    
___ answer2556769 ___

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%     
___ answer2556780 ___

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.

    
___ answer2556960 ___

Verwenden Sie den vorgeschlagenen Ressourcen-Weg:

%Vor%

Fehlerbehandlung ist ein bisschen mehr ..

    
___ answer2556857 ___

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%     
___ answer2556900 ___

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).

    
___ answer2556786 ___

Dies erfordert Refactoring, würde ich sagen.

Ersetzen Sie den Typcode durch die Klasse

    
___ answer4727556 ​​___

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.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123designpatterns ___ Ein Designmuster ist eine allgemeine wiederverwendbare Lösung für ein häufig auftretendes Problem im Softwaredesign. Verwenden Sie dieses Tag für Fragen, wenn Sie Probleme mit der Implementierung von Entwurfsmustern haben. Bitte verwenden Sie dieses Tag nicht bei Fragen zum Textmustervergleich. ___ answer2556775 ___

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%     
___ answer4727390 ___

Ich würde diese Werte in eine Datenbank setzen. Rollen gehören normalerweise aus verschiedenen Gründen in eine Datenbank:

  1. Berichte müssen möglicherweise für die Rollen ausgeführt werden, daher müssen die Beschreibungen angezeigt werden.
  2. Rollendefinitionen können ohne Bereitstellung von neuem Code konfiguriert werden.
  3. Rollen sollten mit einer Schlüsseleinschränkung erzwungen werden.

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.

    
___ qstnhdr ___ Was ist die Best Practice-Methode zum Konvertieren von enum in string? ___
user29439 18.01.2011 18:18
quelle

Tags und Links