मान से Enum स्ट्रिंग नाम


407

मेरे पास इस तरह एक एनुम निर्माण है:

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

मेरे डेटाबेस में, मानों को संदर्भ द्वारा संदर्भित किया जाता है। मेरा सवाल यह है कि, मैं एनम के संख्या प्रतिनिधित्व को वापस स्ट्रिंग नाम में कैसे बदल सकता हूं।

उदाहरण के लिए, 2परिणाम दिया जाना चाहिए Visible


25
मेरा मानना ​​है, अब वीएस 2015 के साथ ऐसा करने का एक आसान तरीका है। nameof(EnumDisplayStatus.Visible)आशा है कि यह किसी की मदद करता है
गेब्रियल मारियस पोपेस्कू

जवाबों:


542

आप intएक साधारण सदस्य के साथ एक गणन सदस्य में वापस परिवर्तित कर सकते हैं , और फिर कॉल कर सकते हैं ToString():

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

13
अपडेट: IFormatProvider का उपयोग करने वाले केवल कुछ ओवरलोड को हटा दिया जाता है। ToString () ठीक है। देखें groups.google.com/group/DotNetDevelopment/browse_thread/thread/...
AndyM

के मामले में व्यवहार क्या है enum Foo { A = 1, B= 1 }?
dbkk

3
@dbkk प्रलेखन में कहा गया है कि एनमों के संबंध में "आपके कोड को कोई धारणा नहीं बनानी चाहिए कि किस स्ट्रिंग को वापस किया जाएगा।" सटीक स्थिति की वजह से आप बोली। देख msdn.microsoft.com/en-us/library/16c1xs4z.aspx
पॉल डी 'Ambra

4
एक uptodated समाधान: msdn.microsoft.com/en-us/library/…
जैक

4
छोटा: var stringValue = ((EnumDisplayStatus) मान) .ToString ()
redwards510

188

यदि आपको उदाहरण "Visible"प्राप्त किए बिना एक स्ट्रिंग प्राप्त करने की आवश्यकता है तो आप EnumDisplayStatusऐसा कर सकते हैं:

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

5
यदि आप मंडोलेन के उत्तर के बारे में कोई अशुद्धि है: Enum.GetName एक स्ट्रिंग लौटाता है, Enum नहीं
algreat

क्या यह प्रतिबिंब का उपयोग करता है या संकलनकर्ता पर्दे के पीछे उपयोग के लिए एक सहायक शब्दकोश बनाता है?
पालसिम्

155

इसे इस्तेमाल करे:

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

@nilco यह उत्तर अच्छा है, लेकिन मुझे Kents का उत्तर पसंद है, इसका मुख्य कारण यह है कि मेरे एनमों पर एक कस्टम विशेषता है "विवरण" मेरे पास विवरण प्राप्त करने के लिए एक Enum एक्सटेंशन है - यह उपयोगकर्ता के लिए स्क्रीन पर प्रदर्शित करने के लिए है।
हरगह

60

इसे इस्तेमाल करो:

string bob = nameof(EnumDisplayStatus.Visible);

9
C # 6+ की आवश्यकता है।
एडम के डीन

10
@ याचद यह जानने के लिए एक बड़ी बात है, निश्चित; लेकिन यह नहीं है वास्तव में , ओपी के परिदृश्य में लागू होते हैं के बाद से मूल्यों एक डेटाबेस से आ रहे हैं (ताकि: क्रम, नहीं संकलन समय, मान)
मार्क Gravell

22

आप बस इसे डाल सकते हैं

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

आह .. केंट ने मुझे हरा दिया :)


अब केंट को सभी "पहले उत्तर" प्रतिनिधि मिलते हैं। अच्छा एक कैंट! : पी
मैट कोकाज

12

DB से C #

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

C # से DB तक

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

12

समाधान:

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

इसके अलावा, GetName का उपयोग करना Enum की स्पष्ट कास्टिंग से बेहतर है ।

[प्रदर्शन बेंचमार्क के लिए कोड]

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}");

[नमूना परिणाम]

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

2
यह 7 साल पुराने उत्तर की एक प्रति है। क्या आप बता सकते हैं कि मूल से बेहतर क्यों है?
nvoigt

@nvoigt क्योंकि, अगर मैं सही हूं, तो Enum पर ToString () API अब अप्रचलित है। [ docs.microsoft.com/en-us/dotnet/api/…
नवीन कुमार V

इसलिए ... कम से कम दो अन्य उत्तर पहले से ही आपके द्वारा पोस्ट किए गए कोड प्रदान करते हैं। मंडोलन या अल्ग्रेत में से एक पर आपका क्या प्रदान करता है?
nvoigt

@nvoigt उन्होंने स्पष्ट कास्टिंग की तुलना में इसके प्रदर्शन के बारे में उल्लेख नहीं किया। क्या मेरे जवाब पसंद करने के लिए यह आपके लिए पर्याप्त है? : पी वैसे भी धन्यवाद, मुझे आशा है कि यह किसी की मदद करेगा। :)
नवीन कुमार V

हमें एक संचार समस्या लगती है। क्या आप एक मोबाइल डिवाइस पर हैं या हो सकता है कि आपने बहुत दूर तक स्क्रॉल न किया हो? 7 साल पहले से आपके उत्तर की दो सटीक प्रतियां हैं। मैंने जवाब देने वालों का नाम दिया, इसलिए उन्हें ढूंढना आसान होना चाहिए। आपका जवाब क्या प्रदान करता है जो कम से कम 7 साल से यहां पहले से ही नहीं है?
nvoigt

9

nameof अभिव्यक्ति का उपयोग करते हुए सबसे तेज़, संकलन समय समाधान ।

एनुम का शाब्दिक लौटाता है।

public enum MyEnum {
    CSV,
    Excel
}


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

ध्यान दें:

  • आप पूरे अपरकेस में एक एनम का नाम नहीं लेना चाहेंगे, लेकिन केस-सेंसिटिविटी को प्रदर्शित करने के लिए उपयोग किया जाता है nameof

यह एक जवाब होना चाहिए था।
लिनपी प्रशंसक

@LinPyfan खुशी है कि यह अच्छी तरह से काम करता है! यह ओपी तिथि की तुलना में अपेक्षाकृत नया है।
रीप

4

बस जरूरत है:

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

1
ज्यादातर मामलों में, यह 10 साल पहले के शीर्ष उत्तर के समान है; "f"विनिर्देशक के अतिरिक्त को बारीक किया जाता है, और हो सकता है या नहीं हो सकता है कि कॉलर क्या चाहता है (यह इस पर निर्भर करता है: वे क्या चाहते हैं): docs.microsoft.com/en-us/dotnet/standard/base-types/…
मार्क

मैंने तारीख आह पर ध्यान नहीं दिया। मुझे लगता है कि इस तरह से पुराने समाधान को थोड़ा अपडेट करना अच्छा है। मैं इस पृष्ठ को खोलने वाला अंतिम नहीं होगा। और आपकी सटीकता के लिए धन्यवाद! :)
Al3x_M

3

स्ट्रिंग मान प्राप्त करने के लिए [नाम]:

EnumDisplayStatus enumDisplayStatus = (EnumDisplayStatus)GetDBValue();
string stringValue = $"{enumDisplayStatus:G}"; 

और एनम मूल्य प्राप्त करने के लिए:

string stringValue = $"{enumDisplayStatus:D}";
SetDBValue(Convert.ToInt32(stringValue ));

सिर्फ क्यों नहीं .ToString () '
फेसपालम

3

मैंने नीचे दिए गए इस कोड का उपयोग किया है

 CustomerType = ((EnumCustomerType)(cus.CustomerType)).ToString()

1

बस एन्यूमरेशन टाइप करने के लिए इंट कास्ट करें:

EnumDisplayStatus status = (EnumDisplayStatus) statusFromDatabase;
string statusString = status.ToString();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.