| 

.NET C# Java Javascript Exception

4
Ich suche eine Möglichkeit um beim Aufruf von ToString bei einem Enum, ganz bestimmte Strings zurück zu geben.

Beispiel:

enum Foo
{
[MagicAttribute("Standard Bar")]
StandardBar,

[MagicAttribute("Advanced Bar")]
AdvancedBar,
}


gewünschtes Ergebnis:
Foo bar = Foo.StandardBar;

// result sollte dann ein Leerzeichen enthalten
string result = bar.ToString();


Grund dafür ist, dass ich ein XML-Codemapping habe. Die Werte im XML enthalten durchaus Leerzeichen, sollten im Code aber durch eine Enumeration dargestellt werden. Könnte ich hier das ToString etwas aufbohren, kann ich Magicstrings vermeiden und demnach die Fehlerwahrscheinlichkeit verringern.
News:
14.04.2011
Hendrik Lösch 1,5k 1 9
2 Antworten
2
Das "MagicAttribute" gibt es schon - das DescriptionAttribute aus System.ComponentModel passt ganz gut. Leider wird es von ToString() nicht berücksichtigt, und auch kein anderes Attribut. Du brauchst also eigenen Code, um das Attribut auszuwerten. Die Nachbarn von stackoverflow waren mal wieder schneller und haben schon ein Beispiel, wie das geht - und auch eine Alternative mit Erweiterungsmethoden. Interessant dazu auch dieser Post, der die Konvertierung in einen TypeConverter verlagert.

Die Attribut-basierten Lösungen sind leider relativ aufwendig und lohnen sich m.E. erst dann, wenn man den Code für relativ viele Enum-typen verwenden kann. Als einfache und schnelle Alternative finde ich die Erweiterungsmethoden schöner.
14.04.2011
Matthias Hlawatsch 13,2k 4 9
0
Übrigens man kann auch von System.ComponentModel.DescriptionAttribute ableiten und somit ganz viele eigene Features integrieren. Auch toString usw.

Attribute müssen in .NET konstante Werte haben, das ist immer schlecht bei Texten, dei z.B. international verwendet werden sollen. Eine Lösung ist eine Implementierung eines Konstruktors mit Parameter, der dann einen konstaten Wert bekommen kann; intern dann je nach eingestellter Sprache einen internationalen Text zurück gibt.
14.04.2011
schokostecker 108 5

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH