Sunday 15 February 2015

c# - How do I convert a char to a char-based Enum object? -


मेरे पास यह मान है:

  enum OptionalityEnum {call = 'C', put = 'पी', अपरिभाषित = 'एन'}   

क्या एआरएम को एएनम प्रकार में बदलने का एक आसान तरीका है? यह काम करता है:

  चार chOpt = 'C'; OptionalityEnum opt = (OptionalityEnum) chOpt; // opt = OptionalityEnum.call   

लेकिन अगर मेरा चारार एक मान है जो गणण में मौजूद नहीं है, तो यह अजीब परिणाम उत्पन्न करता है।

  char ChOpt = 'X'; OptionalityEnum opt = (OptionalityEnum) chOpt; // opt = 88   

मुझे ऐन्यूम कार्यों में से कुछ पता है, लेकिन मुझे ऐसा कोई नहीं मिल सकता जो मेरे लिए यह रूपांतरण करता है।

  Enum GETNames (typeof (OptionalityEnum)) = {call, na, put} Enum.GetValues ​​(typeof (OptionalityEnum)) = {call, na, put} Enum.TryParse & lt; OptionalityEnum & gt; ("C", out optionality) = false Enum .ट्रीपरस & lt; OptionalityEnum & gt; ("कॉल", आउट विकल्प) = सच // ... लेकिन वह ऐसा नहीं है जो मुझे चाहिए। Enum.IsDefined (typeof (OptionalityEnum), "call") = सच // ... लेकिन यह नहीं है कि मैं क्या चाहता हूँ।   

क्या मुझे अपना खुद का कनवर्टर लिखने की ज़रूरत है? इस तरह से कुछ?

निजी स्थिर विकल्पनिवेश एंनाम कन्वर्ट (चार च) {OptionalityEnum परिणाम = (OptionalityEnum) ch; यदि (Enum.IsDefined (typeof (OptionalityEnum), परिणाम)) रिटर्न परिणाम; और वापसी विकल्प। } <प्री> प्राइवेट स्टैटिक बॉल्स ट्रेल कॉन्वर्ट (चार सीआईएल, ऑप्शनलिटीइनीम ऑप्ट आउट) {opt = (ऑप्टीकलएनम) सीएच; वापसी Enum.Is परिभाषित (typeof (OptionalityEnum), ऑप्ट); }

यह काम करता है लेकिन यह मैला लगता है। मुझे आश्चर्य होगा अगर ऐसा कुछ पहले से मौजूद नहीं है।

संपादित करें: मैंने मूल रूप से मेरे Convert फ़ंक्शन के लिए एक खराब उदाहरण का उपयोग किया था। मैंने इसे TryConvert फ़ंक्शन में बदल दिया।

आपका "ढलान" समाधान लगता है मेरे लिए पूरी तरह से उचित आपके लिए कुछ भी नहीं है जो "अपरिभाषित" पर डिफ़ॉल्ट हो रहा है सशर्त ऑपरेटर का प्रयोग करके इसे थोड़ा क्लीनर बना दिया जाएगा: <प्री> निजी स्थिर विकल्पनिवेश एन्नम कन्वर्ट (चार च) {OptionalityEnum परिणाम = (OptionalityEnum) ch; वापसी Enum.Is परिभाषित (typeof (OptionalityEnum), परिणाम)? परिणाम: वैकल्पिकताइनाम.उद्दिष्ट; }

संपादित करें: TryConvert विधि के लिए, मैं वास्तव में सुनिश्चित कर सकता हूं कि आप opt से डिफ़ॉल्ट (OptionalityEnum) को सेट करें ) यदि यह अस्तित्व में नहीं है।

लेकिन नहीं, मुझे विश्वास नहीं है कि यह ढांचे में मौजूद है। हालांकि, आप शायद मेरे प्रोजेक्ट को देखना चाहें, जहां आप कम से कम IsNamedValue एक्सटेंशन विधि का उपयोग कर सकते हैं, जो मुक्केबाजी से बचेंगी।

No comments:

Post a Comment