.NET कोर और .NET> 4 में एक सामान्य पार्स विधि है :
Enum.TryParse("Active", out StatusEnum myStatus);
इसमें C # 7 के नए इनलाइन out
वैरिएबल भी शामिल हैं , इसलिए यह ट्राइ-पार्स, स्पष्ट एनम टाइप में रूपांतरण और myStatus
वैरिएबल + को इनिशियलाइज़ करता है।
यदि आपके पास C # 7 और नवीनतम .NET तक पहुंच है, तो यह सबसे अच्छा तरीका है।
मूल उत्तर
.NET में यह बदसूरत है (जब तक कि 4 या उससे अधिक न हो):
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
मैं इसे सरल बनाता हूं:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
तब मैं कर सकता हूँ:
StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");
टिप्पणियों में सुझाया गया एक विकल्प एक एक्सटेंशन जोड़ना है, जो पर्याप्त सरल है:
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();
अंत में, यदि स्ट्रिंग को पार्स नहीं किया जा सकता है, तो आप एक डिफ़ॉल्ट एनुम का उपयोग करना चाहते हैं:
public static T ToEnum<T>(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
T result;
return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}
जो यह कॉल करता है:
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);
हालाँकि, मैं इस तरह से string
(बिना नाम पते के नियंत्रण के) के रूप में एक विस्तार विधि जोड़ने में सावधान रहूंगा, यह सभी उदाहरणों पर दिखाई देगा string
कि क्या वे एक एनम पकड़ते हैं या नहीं (इसलिए 1234.ToString().ToEnum(StatusEnum.None)
यह मान्य लेकिन निरर्थक होगा)। Microsoft के मुख्य वर्गों को अतिरिक्त तरीकों से अव्यवस्थित करने से बचने के लिए अक्सर सबसे अच्छा होता है जो केवल बहुत विशिष्ट संदर्भों में लागू होते हैं जब तक कि आपके संपूर्ण विकास दल को उन एक्सटेंशनों की बहुत अच्छी समझ न हो।