Sind Strings für enums möglich?

7

Ich möchte ein enum wie in:

haben %Vor%

Wie erreiche ich das? Gibt es einen besseren Weg, dies zu tun? Es wird für eine Instanz eines Objekts verwendet, wo es serialisiert / deserialisiert wird. Es wird auch eine Dropdown-Liste füllen.

    
Joan Venge 16.10.2009, 17:48
quelle

12 Antworten

11
%Vor%

Sie können den Wert so erhalten

%Vor%     
Shaun Bowe 16.10.2009, 17:55
quelle
9

Nein, aber wenn Sie "const" Strings definieren und sie wie ein Enum verwenden möchten, hier ist, was ich tue:

%Vor%     
Dave Markle 16.10.2009 17:53
quelle
2

Wenn Sie mit den Erweiterungsmethoden vertraut sind, können Sie leicht tun, wonach Sie suchen:

%Vor%

So können Sie Folgendes tun:

%Vor%     
Pwninstein 16.10.2009 18:01
quelle
1

Enums sind immer mit einem ganzzahligen Wert verknüpft. Also nein. Sie können FilterType.Rigid.ToString () ausführen, um den Zeichenfolgenwert abzurufen, obwohl er nicht direkt lokalisiert werden kann.

    
Etienne Brouillard 16.10.2009 17:53
quelle
1

Sie können den Enum-Namen als String wie diesen erhalten

%Vor%

Sie könnten jedoch mit der Notation Camel Case / Hungary festgefahren sein, aber Sie können dies mit einer solchen Methode einfach in einen benutzerfreundlicheren String umwandeln (nicht die schönste Lösung, ich wäre dankbar, wenn Sie diese Optimierung vornehmen würden) :

%Vor%

Wenn das immer noch nicht schön genug ist, sollten Sie sich die benutzerdefinierten Attribute ansehen, die mit Reflection ...

abgerufen werden können     
Joey 16.10.2009 17:54
quelle
1

Nein, aber Sie können so schummeln:

%Vor%

Und wenn Sie ihre Zeichenfolgenwerte benötigen, können Sie einfach FilterType.Rigid.ToString ()

ausführen     
Malfist 16.10.2009 17:56
quelle
1

Im System.ComponentModel-Namespace gibt es eine Klasse DescriptionAttribute, die hier gut funktioniert.

%Vor%

Dann, um die Beschreibung zu erhalten und zum ToString ()

überzugehen %Vor%     
Josh Bush 16.10.2009 17:58
quelle
1

Dies ist nicht möglich. C # erlaubt nur integrale Aufzählungstypen (int, kurz, lang usw.). Sie können entweder eine einfache "enum-like" -Klasse erstellen oder statische Konstanten verwenden.

%Vor%     
bobbymcr 16.10.2009 17:53
quelle
1

Es ist nicht absolut möglich. Sie können es jedoch mit einem Array vortäuschen.

Erstens: Erzeuge dich so, wie du es normalerweise tust:

%Vor%

Dann erstellen Sie ein Array, das die Werte enthält, die den enum-Werten entsprechen:

%Vor%

Dann können Sie auf Ihre Strings über den Enum-Wert zugreifen:

%Vor%     
scottmgerstl 14.02.2012 17:49
quelle
0

Nein, das ist nicht möglich.

  

Die zugelassenen Typen für ein Enum sind   byte, sbyte, kurz, ushort, int, uint,   lang oder ulong.

Sie können jedoch den deklarierten Namen eines Enums mit der Enum-Klasse abrufen:

%Vor%

Wenn dies für Sie nicht funktioniert, könnte eine Sammlung von String-Konstanten in einer Klasse gesammelt werden.

    
Michael Petrotta 16.10.2009 17:53
quelle
0

Sie können ein Attribut über die Werte

verwenden %Vor%

Beispiel:

%Vor%

und verwenden Sie Reflection, um die Beschreibungen zu erhalten.

Enum-Erweiterungsmethode:

%Vor%

benutze es:

%Vor%     
CSharpAtl 16.10.2009 17:56
quelle
0

Entlang der Linien von Shaun Bowes Beispiel kannst du das auch in C # 3 mit einer Extensionsmethode für enum machen (ich bin nicht auf die Idee gekommen und kann mich nicht erinnern, wo ich war).

Erstelle ein Attribut:

%Vor%

Erstellen Sie eine Erweiterung:

%Vor%

Ich habe festgestellt, dass dies eine wirklich saubere Lösung ist. Fügen Sie in Ihrem Enum Folgendes hinzu:

%Vor%

Sie könnten dann auf FilterType.GetDisplayText() zugreifen, wodurch die Zeichenfolge für die nicht zugeordneten Enums und der displayText für die Attribute mit Attributen zurückgenommen werden.

    
Michael Gattuso 16.10.2009 18:06
quelle

Tags und Links