एक कास्ट संभव नहीं है। मुद्दा यह है कि उपयोगकर्ता द्वारा परिभाषित रूपांतरण को संरचना या कक्षा घोषणा में संलग्न किया जाना चाहिए, और रूपांतरण संलग्न प्रकार से या उसके लिए होना चाहिए। इस प्रकार,
public static explicit operator MyEnum(string value)
क्योंकि न तो MyEnum
है और न ही string
कभी संलग्न प्रकार हो सकता है असंभव है।
ECMA334 सी # कल्पना के प्रासंगिक अनुभाग 17.9.4 है:
एक रूपांतरण ऑपरेटर एक स्रोत के प्रकार, लक्ष्य प्रकार के लिए, रूपांतरण ऑपरेटर के पैरामीटर प्रकार से संकेत दिया, वापसी ने संकेत से धर्मान्तरित रूपांतरण ऑपरेटर का प्रकार। एक वर्ग या संरचना किसी स्रोत प्रकार एस से एक लक्ष्य प्रकार टी में रूपांतरण घोषित करने की अनुमति है, केवल तभी निम्नलिखित सभी सत्य हैं, जहां S0 और T0 पीछे हैं जो पीछे हटने से परिणाम हैं? एस और टी से संशोधक, यदि कोई हो,
एस 0 और टी 0 विभिन्न प्रकार हैं।
या तो एस 0 या टी 0 कक्षा या संरचना प्रकार है जिसमें ऑपरेटर घोषणा होती है।
न तो S0 और न ही T0 एक इंटरफ़ेस-प्रकार है।
उपयोगकर्ता परिभाषित रूपांतरण को छोड़कर, एक रूपांतरण एस से टी करने के लिए या टी एस
को
हालांकि मौजूद नहीं है, आप स्ट्रिंग वर्ग पर एक विस्तार विधि कर सकते हैं।
public static class StringExtensions {
public static T ConvertToEnum<T>(this string value) {
Contract.Requires(typeof(T).IsEnum);
Contract.Requires(value != null);
Contract.Requires(Enum.IsDefined(typeof(T), value));
return (T)Enum.Parse(typeof(T), value);
}
}
शानदार उत्तर! मुझे पता था कि मैंने इसे कहीं कहीं देखा था और यह याद नहीं आया कि इसे कैसे काम करना है। धन्यवाद! –
ग्रेट एक्सटेंशन! कई बार लोग यह सुनिश्चित करना भूल जाते हैं कि मूल्य enum में परिभाषित किया गया है। – Gromer
@Gromer मुझे लगता है कि यह उल्लेखनीय है कि नेट 4.0 ने उस कारण के लिए एक विधि जोड़ा 'Enum.TryParse() '। – Dan