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 .

764voto

Kent Boogaart Punkte 170094

Sie können die int zurück in ein Aufzählungselement mit einem einfachen Cast, und rufen Sie dann ToString() :

int value = GetValueFromDb();
var enumDisplayStatus = (EnumDisplayStatus)value;
string stringValue = enumDisplayStatus.ToString();

14 Stimmen

Aktualisierung: nur bestimmte Überladungen mit IFormatProvider sind veraltet. ToString() ist in Ordnung. Siehe groups.google.com/group/DotNetDevelopment/browse_thread/thread/

0 Stimmen

Wie verhält man sich im Falle von enum Foo { A = 1, B= 1 } ?

5 Stimmen

@dbkk in der Dokumentation heißt es, dass in Bezug auf Enums "Ihr Code keine Annahmen darüber treffen sollte, welche Zeichenfolge zurückgegeben wird", und zwar wegen genau der von Ihnen zitierten Situation. msdn.microsoft.com/de-us/library/16c1xs4z.aspx

277voto

algreat Punkte 8112

Wenn Sie eine Zeichenkette erhalten müssen "Visible" ohne sich EnumDisplayStatus Beispiel können Sie dies tun:

int dbValue = GetDBValue();
string stringValue = Enum.GetName(typeof(EnumDisplayStatus), dbValue);

5 Stimmen

In der Antwort von Mandoleen ist eine Ungenauigkeit enthalten: Enum.GetName gibt eine Zeichenkette zurück, nicht eine Enum

210voto

Mandoleen Punkte 2421

Versuchen Sie dies:

string m = Enum.GetName(typeof(MyEnumClass), value);

102voto

James Cooke Punkte 889

Verwenden Sie dies:

string bob = nameof(EnumDisplayStatus.Visible);

18 Stimmen

Allerdings ist C# 6+ erforderlich.

9 Stimmen

Diese Lösung funktioniert nicht, wenn Sie eine Variable übergeben wollen

54voto

Reap Punkte 695

Die schnellste Lösung zur Kompilierzeit mit nameof Ausdruck .

Gibt das wörtliche Typgehäuse der Aufzählung oder in anderen Fällen ein class , struct o jede Art de variable (arg, param, local, usw.).

public enum MyEnum {
    CSV,
    Excel
}

string enumAsString = nameof(MyEnum.CSV)
// enumAsString = "CSV"

Nota:

  • Ein Enum sollte nicht in Großbuchstaben benannt werden, aber um die Unterscheidung zwischen Groß- und Kleinschreibung bei nameof .

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