2012-01-13 7 views
15

मैं एंटरप्राइज़ आर्किटेक्ट का उपयोग कर this schema से व्यवसाय वस्तुओं का निर्माण कर रहा हूं।मैं डैश (-) को रखने के लिए enum कैसे प्राप्त कर सकता हूं?

स्कीमा निम्नलिखित गणन विनिर्देश है:

<xs:simpleType name="PackageMedium"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="NTP"/> 
     <xs:enumeration value="DAT"/> 
     <xs:enumeration value="Exabyte"/> 
     <xs:enumeration value="CD-ROM"/> 
     <xs:enumeration value="DLT"/> 
     <xs:enumeration value="D1"/> 
     <xs:enumeration value="DVD"/> 
     <xs:enumeration value="BD"/> 
     <xs:enumeration value="LTO"/> 
     <xs:enumeration value="LTO2"/> 
     <xs:enumeration value="LTO4"/> 
    </xs:restriction> 
</xs:simpleType> 

उद्यम वास्तुकार निम्नलिखित कोड उत्पन्न करता है लेकिन दृश्य स्टूडियो पानी का छींटा पसंद नहीं करता है (-) सीडी-रोम में और संकलन नहीं होंगे।

public enum PackageMedium : int { 
    NTP, 
    DAT, 
    Exabyte, 
    CD-ROM, 
    DLT, 
    D1, 
    DVD, 
    BD, 
    LTO, 
    LTO2, 
    LTO4 
} 

यह काम करने के लिए मैं क्या कर सकता हूं?


@Craig Stuntz उत्तर के आधार पर मैं this article जो मुझे Enum से इन विशेष वर्णों को पुनः प्राप्त करने में मदद मिली खोजने के लिए सक्षम था।

+0

क्या आप इसे अंडरस्कोर में बदल सकते हैं? – Marnix

+0

@ मार्निक्स: मुझे नहीं लगता। यह एक ओजीसी मानक है, मुझे लगता है कि मुझे इसे स्कीमा कहने की ज़रूरत है। – capdragon

उत्तर

13

आप नहीं कर सकते। पूर्ण विराम। हालांकि, कामकाज हैं। तुम्हें पता है, उदाहरण के लिए, DescriptionAttribute उपयोग कर सकते हैं:

public enum PackageMedium : int { 
    NTP, 
    DAT, 
    Exabyte, 
    [Description("CD-ROM")] 
    CDROM, 
    DLT, 
    D1, 
    DVD, 
    BD, 
    LTO, 
    LTO2, 
    LTO4 
} 

इसका मतलब यह है, दुर्भाग्य से, आप जब मान मैप करने के लिए और अधिक काम किया है। दूसरी तरफ, यह संकलन में नहीं है।

आपको लगता है कि पसंद नहीं है, एक और वैकल्पिक हल, एक शब्दकोश लेने जैसे:

var dict = Enum.GetValues(typeof(PackageMedium)) 
       .Cast<PackageMedium>() 
       .Select(v => Tuple.Create(v == PackageMedium.CDROM ? "CD-ROM" : v.ToString(), v)) 
       .ToDictionary(t => t.Item1, t => t.Item2); 

var myEnumVal = dict["CD-ROM"]; 
+0

यदि मैं किसी शब्दकोश या सूची के साथ जाता हूं, तो क्या यह अभी भी स्कीमा के लिए "सत्य" होगा जैसा कि यह है? – capdragon

+0

और क्या आप कृपया शब्दकोश या सूची संस्करण का उदाहरण कोड पोस्ट कर सकते हैं? – capdragon

+0

असल में, मैं सिर्फ विवरण के साथ जाऊंगा। – capdragon

6

लघु जवाब: नहीं

कारण किया जा रहा है कि - चरित्र निशानी के रूप में इस्तेमाल किया जाता है अन्य प्रयोजनों के लिए लेक्सर द्वारा बाइनरी और यूनरी माइनस ऑपरेटर का प्रतिनिधित्व करना।

आपकी सर्वश्रेष्ठ शर्त या तो - को निकालना है या इसे किसी अन्य वर्ण के साथ प्रतिस्थापित करना है जो पहचानकर्ता नामों में एक वैध चरित्र है। आमतौर पर उपयोग किए जाने वाले एकमात्र गैर-अक्षर चरित्र _ है।

आप C# Specification में अधिक जानकारी प्राप्त कर सकते हैं।

1

ए सी # पहचानकर्ता को अंडरस्कोर, यूनिकोड क्लास लू, एलएल, लेफ्टिनेंट, एलएम, लो, या एनएल में एक चरित्र, या उनमें से किसी एक के लिए भागने के साथ शुरू होना चाहिए। अन्य सभी पात्र यूनिकोड क्लास लू, एलएल, लेफ्टिनेंट, एलएम, लो, एनएल, एमएन, मैक, एनडी, पीसी या सीएफ, या उनमें से किसी एक के लिए भागने से होना चाहिए।

हाइफ़न-माइनस श्रेणी पीडी का है।

यदि सी # ने इसे अनुमति दी है, तो भी आप इसे सार्वजनिक पहचानकर्ता पर उपयोग नहीं कर पाएंगे यदि आपको सीएलएस अनुपालन करने की आवश्यकता है, क्योंकि यह इसके नियमों को फिट नहीं करेगा।

यह बस के रूप में अच्छी तरह से है, के रूप में आप कैसे CD-ROM से enum में किसी विशेष आइटम अर्थ CD बाएं हाथ संकार्य के रूप में और ROM दाहिने हाथ संकार्य के रूप में साथ - ऑपरेटर लागू करने के लिए अर्थ CD-ROM भेद करने के लिए होती हैं?

यदि संभावनाओं की सूची हार्ड-कोडेड है, तो मैं केवल हाइफ़न-माइनस को हटा दूंगा और CDROM लेबल के रूप में रखूंगा। यदि यह कठिन कोड नहीं है तो मैं एक शब्दकोश का उपयोग करता हूं, क्योंकि यह और भी मामलों के चेहरे में लचीला है जहां कुछ पहचानकर्ता नहीं हो सकता है।

+0

मैं एक शब्दकोश का उपयोग कैसे करूं? यदि कोई शब्दकोश स्कीमा को पूरा करेगा, तो क्या आप एक शब्दकोश संस्करण के कोड को शामिल करने के लिए अपनी टिप्पणी संपादित कर सकते हैं? – capdragon

+0

क्रेग उस पर मेरे आगे रास्ता है :) –

संबंधित मुद्दे

 संबंधित मुद्दे