607 Stimmen

Enum String Name von Wert

Ich habe ein Enum-Konstrukt wie dieses:

public enum EnumDisplayStatus
{
    None    = 1,
    Visible = 2,
    Hidden  = 3,
    MarkedForDeletion = 4
}

In meiner Datenbank werden die Aufzählungen nach Wert referenziert. Meine Frage ist, wie kann ich die Zahlendarstellung der Aufzählung wieder in den Stringnamen umwandeln.

Zum Beispiel, wenn 2 das Ergebnis sollte sein Visible .

30voto

Hath Punkte 12288

Sie können es einfach werfen

int dbValue = 2;
EnumDisplayStatus enumValue = (EnumDisplayStatus)dbValue;
string stringName = enumValue.ToString(); //Visible

ah.. kent ist mir zuvorgekommen :)

20voto

Naveen Kumar V Punkte 2173

LÖSUNG:

int enumValue = 2; // The value for which you want to get string 
string enumName = Enum.GetName(typeof(EnumDisplayStatus), enumValue);

Auch die Verwendung von GetName ist besser als Explizites Casting von Enum .

[Code für Leistungsvergleich]

Stopwatch sw = new Stopwatch (); sw.Start (); sw.Stop (); sw.Reset ();
double sum = 0;
int n = 1000;
Console.WriteLine ("\nGetName method way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = Enum.GetName (typeof (Roles), roleValue);
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Getname method casting way: {sum / n}");
Console.WriteLine ("\nExplicit casting way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = ((Roles)roleValue).ToString ();
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Explicit casting way: {sum / n}");

[Beispielergebnis]

GetName method way:
Average of 1000 runs using Getname method casting way: 0.000186899999999998
Explicit casting way:
Average of 1000 runs using Explicit casting way: 0.000627900000000002

3 Stimmen

Dies ist eine Kopie einer 7 Jahre alten Antwort. Können Sie erklären, warum Ihre Antwort besser ist als das Original?

0 Stimmen

@nvoigt Denn wenn ich richtig liege, ist die ToString()-API für Enum jetzt veraltet. [ learn.microsoft.com/de-us/dotnet/api/

1 Stimmen

Also... mindestens zwei andere Antworten liefern bereits den von Ihnen geposteten Code. Was bietet dein Code im Vergleich zu dem von Mandoleen oder algreat?

17voto

StackOverflowUser Punkte 745

Gegeben:

enum Colors {
    Red = 1,
    Green = 2,
    Blue = 3
};

In .NET 4.7 gilt Folgendes

Console.WriteLine( Enum.GetName( typeof(Colors), Colors.Green ) );
Console.WriteLine( Enum.GetName( typeof(Colors), 3 ) );

wird angezeigt

Green
Blue

In .NET 6 funktioniert das Obige immer noch, aber auch:

Console.WriteLine( Enum.GetName( Colors.Green ) );
Console.WriteLine( Enum.GetName( (Colors)3 ) );

wird angezeigt:

Green
Blue

15voto

DB zu C#

EnumDisplayStatus status = (EnumDisplayStatus)int.Parse(GetValueFromDb());

C# zu DB

string dbStatus = ((int)status).ToString();

8voto

Al3x_M Punkte 174

Sie brauchen nur:

string stringName = EnumDisplayStatus.Visible.ToString("f");
// stringName == "Visible"

2 Stimmen

In den meisten Fällen ist dies so ziemlich identisch mit der ersten Antwort von vor 10 Jahren; die Hinzufügung des "f" Spezifizierer ist nuanciert und kann das sein, was der Aufrufer will oder auch nicht (es hängt davon ab, was er will): learn.microsoft.com/de-us/dotnet/standard/base-types/

1 Stimmen

Ich habe nicht auf das Datum geachtet, ahah. Ich denke, es ist gut, die alte Lösung wie diese ein wenig zu aktualisieren. Ich werde nicht der letzte sein, der diese Seite öffnet. Und danke für deine Präzision! :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X