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.
Nein, aber wenn Sie "const" Strings definieren und sie wie ein Enum verwenden möchten, hier ist, was ich tue:
%Vor%Wenn Sie mit den Erweiterungsmethoden vertraut sind, können Sie leicht tun, wonach Sie suchen:
%Vor%So können Sie Folgendes tun:
%Vor%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.
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önnenEs 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%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.
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.