एनम चर के लिए डिफ़ॉल्ट मान क्या है?


240

एक एनम चर, किसी को पता है कि क्या यह हमेशा पहले तत्व के लिए डिफ़ॉल्ट है?


1
उपयोग मामले के लिए एक विचार जहां एक डिफ़ॉल्ट एनम वांछित है एक अशक्त चर का उपयोग करना है। जब कोई नल प्राप्त होता है, तो इसे कोड के सही भाग में डिफ़ॉल्ट रूप से अनुवादित किया जा सकता है, और इस डिफ़ॉल्ट को बाकी कोड में पता नहीं होना चाहिए (जो कि बस एक अशक्त के साथ गुजरता है)।
एरिक

जवाबों:


381

यह गणना का सदस्य है जो मूल्य का प्रतिनिधित्व करता है 0। विशेष रूप से, प्रलेखन से :

एक का डिफ़ॉल्ट मान enum Eअभिव्यक्ति द्वारा उत्पादित मूल्य है (E)0

एक उदाहरण के रूप में, निम्नलिखित एनम को लें:

enum E
{
    Foo, Bar, Baz, Quux
}

, मूलभूत मूल्यों अधिभावी मुद्रण के बिना default(E)रिटर्न Fooके बाद से यह पहली बार होने वाली तत्व है।

हालांकि, यह हमेशा ऐसा नहीं होता है कि 0पहले सदस्य द्वारा एक एनम का प्रतिनिधित्व किया जाता है। उदाहरण के लिए, यदि आप ऐसा करते हैं:

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

छपाई default(F)आपको देगी Quux, नहीं Foo

यदि किसी एनम में कोई भी तत्व इसके Gअनुरूप नहीं है 0:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G)शाब्दिक रूप से रिटर्न देता है 0, हालांकि इसका प्रकार G(डॉक्स द्वारा ऊपर दिए गए उद्धरण के अनुसार एक प्रकार के रूप में उद्धृत) रहता है।


1
धन्यवाद, और इंट के बजाय चारो के साथ परिभाषित एनम के बारे में क्या। उदाहरण के लिए enum Status {Active = 'A', Inactive = 'I'}
फर्नांडो टोरेस

3
@ फ़र्नान्डो टोरेस: फिर भी 0, जब तक कि आपका कोई एनम मान '\0'या उससे मेल नहीं खाता है default(char), जो तब से बहुत अधिक संभावना नहीं हैdefault(char) NUL चरित्र है जो चार कोड 0. से मेल खाती है
BoltClock

मैंने (गलत तरीके से?) यह मान लिया कि DefaultValueविशेषता का उपयोग करते हुए - कुछ-कुछ जैसे System.ComponentModel.DefaultValue(MyEnum.Blah)व्यवहार को संशोधित करता है, default(MyEnum)लेकिन यह अभी भी पैदावार करता है। 0. क्या enumइसके डिफ़ॉल्ट मान के आसपास कोई अमूर्त बनाने का कोई तरीका नहीं है ?
क्रेग सिल्वर

2
@ क्रेग सिल्वर: DefaultValue विशेषता गुणों पर लागू होती है - एक Enum एक प्रकार है और इस तरह, DefaultValue का पूरे रूप में Enum प्रकार पर कोई प्रभाव नहीं पड़ता है। मैं तुम्हें एक तरह का ही विस्तार विधि के साथ इस पर काम कर सकता है लगता है, लेकिन आप बेहतर बंद सिर्फ 0. के लिए जाँच कर रहे हैं
BoltClock

11

मुझे लगता है कि यह काफी खतरनाक है कि किसी एनम में मूल्यों के आदेश पर भरोसा किया जाए और यह मान लिया जाए कि पहला हमेशा डिफ़ॉल्ट होता है। यदि आप डिफ़ॉल्ट मान की सुरक्षा के बारे में चिंतित हैं तो यह अच्छा अभ्यास होगा।

enum E
{
    Foo = 0, Bar, Baz, Quux
}

अन्यथा, यह सब लेता है आदेश का एक लापरवाह रिफ्लेक्टर है और आपको पूरी तरह से अलग डिफ़ॉल्ट मिला है।


3
क्षमा करें आप गलत हैं। मैं एक ही मान लिया गया है, लेकिन यदि आप डाल Fooके बाद Barदोनों Fooऔर Barका मान 0 जाएगा और E.Foo == E.Barवापस आ जाएगी true। यह बहुत बेवकूफी
भरा और उलझा हुआ है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.