Autor Beitrag
ebber
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Mo 19.05.08 17:36 
Hallo

ich habe das gemacht :

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Mo 19.05.08 18:03 
Ich wollte zu jeder Option einen String haben den ich dann dem Benutzer anzeigen kann.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.05.08 18:19 
Du kannst das so machen:

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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Di 20.05.08 00:28 
Hallo

ich habe mal versucht das hinzubekommen, aber es ist mir leider nicht wirklich gelungen.

Der Fehler:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4803
Erhaltene Danke: 1060

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 20.05.08 09:02 
Hast du den passenden Namespace eingebunden?
ausblenden C#-Quelltext
1:
using System.ComponentModel;					
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
  1. Gehe in die SDK-Doku zu der Klasse, die der Compiler nicht kennen will, und zwar auf die Übersichtsseite "Informationen zur Xy-Klasse".
  2. Ganz oben stehen Hinweise auf Namespace und Assembly.
  3. Füge in Deinem Projekt einen Verweis (Referenz) auf diese Assembly ein, soweit noch nicht geschehen.
  4. 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:
ausblenden C#-Quelltext
1:
2:
Options option = Options.None;
MessageBox.Show(option.ToString());   //  Ausgabe: "None"

Umgekehrt kann aus dieser String-Darstellung auch über Enum.Parse der passende enum-Wert geholt werden.

Gruß Jürgen
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Di 20.05.08 16:12 
Das ganze funktioniert so mit dieser ganz leicht verbesserten Version

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 20.05.08 16:36 
user profile iconebber 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.)

user profile iconebber 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