Entwickler-Ecke
C# - Die Sprache - Enum mit string
ebber - Mo 19.05.08 17:36
Titel: Enum mit string
Hallo
ich habe das gemacht :
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public enum Options { None = 1, Down = 2, Missing = 3, } |
Kann ich da auch irgendwie einen string statt int hinschreiben?
MfG
Christian S. - Mo 19.05.08 17:44
Einfache Antwort: Nein.
Ausführliche Antwort: Du kannst mittels eines Attributs noch einen String zuordnen, den man auslesen kann, aber der Wert muss ein Integer sein. Wozu brauchst Du das denn? Wenn man das weiß, kann man besser antworten.
ebber - Mo 19.05.08 18:03
Ich wollte zu jeder Option einen String haben den ich dann dem Benutzer anzeigen kann.
Christian S. - Mo 19.05.08 18:19
Du kannst das so machen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public enum Options { [Description("Nix")] None = 1, [Description("Runter")] Down = 2, [Description("Fehlt")] Missing = 3 }
public string GetEnumDescription(Enum value) : String { var fi = value.GetType().GetField(value.ToString()); var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false)); if (attributes.Length > 0) return attributes[0].Description else return ""; } |
Hab das mal frei von einem Chrome-Quelltext von mir übertragen, können also noch Fehler drin sein. Wenn Du die Beschreibungen noch lokalisiert haben willst, kannst Du statt direkt den Inhalt des DescriptionAttributes anzuzeigen, auch aus den Resourcen Deiner Anwendung anhand des Attributs einen lokalisierten String raussuchen.
ebber - Di 20.05.08 00:28
Hallo
ich habe mal versucht das hinzubekommen, aber es ist mir leider nicht wirklich gelungen.
Der Fehler:
Quelltext
1: 2:
| The type or namespace name 'Description' could not be found (are you missing a using directive or an assembly reference?) The type or namespace name 'DescriptionAttribute' could not be found (are you missing a using directive or an assembly reference?) |
Habe in der Hilfe danach gesucht, aber nicht das passende gefunden. Wenn ich dachte ich hätte was gabs wieder einen anderen Fehler. :?
MfG
Th69 - Di 20.05.08 09:02
Hast du den passenden Namespace eingebunden?
C#-Quelltext
1:
| using System.ComponentModel; |
JüTho - Di 20.05.08 09:05
Hallo,
diese Fehlermeldung ist doch ein
Standardhinweis, der am Anfang immer wieder vorkommt und den man schnell lernt zu beheben:
- Gehe in die SDK-Doku zu der Klasse, die der Compiler nicht kennen will, und zwar auf die Übersichtsseite "Informationen zur Xy-Klasse".
- Ganz oben stehen Hinweise auf Namespace und Assembly.
- Füge in Deinem Projekt einen Verweis (Referenz) auf diese Assembly ein, soweit noch nicht geschehen.
- Füge in Deine Klasse mit using einen Verweis auf diesen Namespace ein, oder verwende bei der Klasse einen vollständigen "qualifizierten" Namen.
Für Deine Frage ist Christians Lösung vermutlich der richtige Weg. Nur der Vollständigkeit halber weise ich darauf hin, dass ein enum-Wert auch als String angezeigt werden kann:
C#-Quelltext
1: 2:
| Options option = Options.None; MessageBox.Show(option.ToString()); |
Umgekehrt kann aus dieser String-Darstellung auch über
Enum.Parse der passende enum-Wert geholt werden.
Gruß Jürgen
ebber - Di 20.05.08 16:12
Das ganze funktioniert so mit dieser ganz leicht verbesserten Version
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public string GetEnumDescription(Enum value) { var fi = value.GetType().GetField(value.ToString()); var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes.Length > 0) return attributes[0].Description; else return ""; } |
Diesen "Standardfelher" beheben, dachte ich, kann ich mittlerweile. Normalerweise mach ich die Hilfe auf, sucht danach und dann stehen "Ganz oben [] Hinweise auf Namespace und Assembly. ", aber nach "Description" suchen :? .
Vielleicht eine blöde Frage, aber was genau meinst du mit SDK-Doku?
MfG
JüTho - Di 20.05.08 16:36
ebber hat folgendes geschrieben: |
| Diesen "Standardfelher" beheben, dachte ich, kann ich mittlerweile. Normalerweise mach ich die Hilfe auf, sucht danach und dann stehen "Ganz oben [] Hinweise auf Namespace und Assembly. ", aber nach "Description" suchen :? . |
Naja, alles, was oberhalb eines Elements in den Klammern [] steht, ist ein Attribut. Die Klasse, die zu einer Description gehört, ist also die
DescriptionAttribute-Klasse. (Dumm nur, dass das Stichwort "Description-Attribut" nicht hilft; aber das kann man nur MS zum Vorwurf machen.)
ebber hat folgendes geschrieben: |
| Vielleicht eine blöde Frage, aber was genau meinst du mit SDK-Doku? |
SDK = Software Development Kit = Software, die zum Entwickeln benutzt wird
konkret das NET-SDK, also das Programmpaket, mit dem wir NET-Programme erstellen
Doku = Dokumentation
kurz gesagt: das, was Du über F1 innerhalb der IDE aufrufst, kann auch als separates Dokument gelesen werden; ich meine also nichts anderes als die Direkthilfe "außerhalb von Programm und Internet"
Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!