2010-08-16 10 views
14

मेरे पास कुछ क्लाइंट डेटा है जो मैं पढ़ रहा हूं, और मैंने मानों में से एक के लिए एनम को परिभाषित किया है, इसलिए मैं Enum.Parse (टाइप, somestring) का उपयोग कर सकता हूं।क्या सी # में एनम को परिभाषित करना संभव है जो कि कीवर्ड हैं?

समस्या यह है कि उन्होंने अभी एक नया मूल्य जोड़ा: "सार्वजनिक"। क्या एक एनम वैल्यू को परिभाषित करना संभव है जो एक आरक्षित शब्द भी है?

यानी .:

public enum MyEnum { 
    SomeVal, 
    SomeOtherVal, 
    public, 
    YouGetTheIdea 
} 

तो मुझे लगता है कि नहीं मैं एक पार्स विधि के बजाय लिख दिया जाएगा।

उत्तर

25

आप चर नाम पर @ प्रीपेड कर सकते हैं। यह आपको परिवर्तनीय नामों के रूप में कीवर्ड का उपयोग करने की अनुमति देता है - इसलिए @public

here देखें।

C# spec से:

उपसर्ग "@" पहचानकर्ता के रूप में खोजशब्दों का उपयोग, जो उपयोगी होता है जब अन्य प्रोग्रामिंग भाषाओं के साथ इंटरफ़ेस सक्षम बनाता है। चरित्र @ वास्तव में पहचानकर्ता का हिस्सा नहीं है, इसलिए पहचानकर्ता को अन्य भाषाओं में उपसर्ग के बिना सामान्य पहचानकर्ता के रूप में देखा जा सकता है। @ उपसर्ग के साथ एक पहचानकर्ता को वर्बैटिम पहचानकर्ता कहा जाता है। पहचानकर्ताओं के लिए @ उपसर्ग का उपयोग जो कीवर्ड नहीं हैं, लेकिन शैली के मामले के रूप में दृढ़ता से निराश हैं।

+0

आपका मतलब है प्रीपेन्ड, संलग्न नहीं है। –

+0

@ जोन स्कीट - मैं वास्तव में करता हूं। धन्यवाद। – Oded

7

यदि आप public से Public को कैपिटल करते हैं तो इसे किसी कीवर्ड के रूप में पहचाना नहीं जाएगा। कीवर्ड केस संवेदनशील हैं।

हालांकि, सामान्य अभ्यास के रूप में, कीवर्ड के नामों का उपयोग करना एक बुरा विचार है (यहां तक ​​कि जब वे मामले से अलग होते हैं) क्योंकि यह भ्रम पैदा कर सकता है, या यहां तक ​​कि सूक्ष्म दोष भी हो सकता है यदि कीवर्ड गलती से पहचानकर्ता के स्थान पर उपयोग किया जाता है ।

गैर-कीवर्ड के रूप में आरक्षित शब्दों का उपयोग करने के लिए कुछ संदर्भों (जैसे परिवर्तनीय या सदस्य घोषणाओं) में @ का उपयोग करना भी संभव है। हालांकि, यह एक सामान्य प्रथा नहीं है और केवल अंतिम उपाय का साधन होना चाहिए, जब आप एक अलग नाम का उपयोग नहीं कर सकते हैं।

तो आपके मामले में आप आरक्षित शब्द को एनम पहचानकर्ता के रूप में उपयोग करने के लिए @public का भी उपयोग कर सकते हैं।

यदि आपने @ का उपयोग करना चुना है, तो ध्यान रखें कि प्रतीक केवल आपके स्रोत कोड में उपयोग किया जाता है ताकि आरक्षित शब्द से पहचानकर्ता को अलग किया जा सके। बाहरी दुनिया (और Enum.Parse() जैसी विधियों में), एनम मान का नाम बस public है।

+0

यदि पार्स विधि मेल नहीं खाती है तो पार्स विधि अभी भी काम करेगी? – Ferruccio

+0

मुझे यह एहसास है, लेकिन मेरे पास इस तथ्य पर नियंत्रण नहीं है कि क्लाइंट ने "सार्वजनिक" को उनके इच्छित मूल्य के रूप में चुना है। –

+0

पार्स में एक ध्वज है जो आपको गैर-केस-संवेदी निर्दिष्ट करने की अनुमति देता है, हालांकि मेरे मामले में यह असुविधाजनक होगा (हालांकि शो-स्टॉपर नहीं) इसे उपयोग करने वाले सहायक वर्गों के कारण इसे निर्दिष्ट करना होगा। –

8

हाँ, नाम @ के साथ उपसर्ग करें। यानी @public

0

हालांकि यह वास्तव में ऐसा करने का एक अच्छा विचार नहीं है। इसके बजाय, enum करने के लिए थोड़ा और अधिक जानकारी जोड़ें:

PublicAccess आदि

+1

मुझे यह एहसास है, लेकिन मैं नहीं इस तथ्य पर नियंत्रण नहीं है कि ग्राहक ने "सार्वजनिक" को उनके इच्छित मूल्य के रूप में चुना है। –

0

VB.Net में वर्ग कोष्ठकों [...] एक पहचानकर्ता के रूप में एक कीवर्ड चित्रित करने के लिए इस्तेमाल करते हैं। उदाहरण:

Public Sub Test(ByVal [public] As String) 
    MessageBox.Show("Test string: " & [public]) 
End Sub 
0

वीबी के लिए।नेट निम्नलिखित करते हैं:

Public Enum MyEnum As Integer 
    Disabled = 0 
    [New] = 1 
    [Public] = 2 
    Super = 4 
    [Error] = 5 
End Enum 
संबंधित मुद्दे