2008-11-21 12 views
220

Mam enum skonstruować tak:Nazwa String z Enum Wartość

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

W mojej bazy danych, wyliczenia są odniesione przez wartość. Moje pytanie brzmi: jak mogę odwrócić reprezentację liczbową wyliczenia z powrotem na nazwę ciągu znaków.

Na przykład, biorąc pod uwagę 2, wynik powinien wynosić Visible.

+5

wierzę, obecnie istnieje łatwiejszy sposób to zrobić z VS 2015 'nameof (EnumDisplayStatus.Visible)' Nadzieja pomaga komuś –

Odpowiedz

314

można przekonwertować int z powrotem do elementu wyliczenia z prostym obsady, a następnie zadzwonić ToString():

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

Update: tylko pewne przeciążenia wykorzystujące IFormatProvider są przestarzałe. ToString() jest w porządku. Zobacz http://groups.google.com/group/DotNetDevelopment/browse_thread/thread/dcdbeae086360208 – AndyM

+0

Jakie jest zachowanie w przypadku 'enum Foo {A = 1, B = 1}'? – dbkk

+2

@dbkk dokumentacja stwierdza, że ​​w odniesieniu do wyliczeń "twój kod nie powinien przyjmować żadnych założeń co do tego, który ciąg zostanie zwrócony." ze względu na dokładną sytuację, którą cytujesz. zobacz http://msdn.microsoft.com/en-us/library/16c1xs4z.aspx –

15

można po prostu rzucić to

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

ah .. Kent pokonać mnie to :)

0

Po prostu prześlij int do typu wyliczenia:

EnumDisplayStatus status = (EnumDisplayStatus) statusFromDatabase; 
string statusString = status.ToString(); 
7

DB do C#

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

C# DB

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

Spróbuj tego:

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

To powinna być odpowiedź. – niico

112

Jeśli trzeba uzyskać ciąg "Visible" bez uzyskiwania EnumDisplayStatus przykład można to zrobić :

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

Ta odpowiedź jest już opublikowana (o dziwo masz więcej głosów) .. – nawfal

+2

Jeśli chodzi o odpowiedź Mandoleena, jest niedokładność: Enum.GetName zwraca ciąg, a nie Enum – algreat

+0

o tak, masz rację, więc +1 dla Ciebie też :) – nawfal

Powiązane problemy