2010-11-01 15 views
14

के लिए डिफ़ॉल्ट मान निर्दिष्ट करें क्योंकि मैं डिफ़ॉल्ट (ऑब्जेक्ट) को समझता हूं जहां 'ऑब्जेक्ट' कोई संदर्भ प्रकार हमेशा शून्य देता है, लेकिन क्या मैं निर्दिष्ट कर सकता हूं कि डिफ़ॉल्ट क्या है? उदाहरण के लिए, मुझे डिफ़ॉल्ट (वस्तु) == नई वस्तु() चाहिए;संदर्भ प्रकार

+1

नहीं, यह संभव नहीं है। क्या आप हमें यहां अंतिम लक्ष्य बता सकते हैं, यानी आप यह सुविधा क्यों चाहेंगे? – Ani

+0

नंबर और आपको ऐसा करने की आवश्यकता क्यों होगी? यदि ऑब्जेक्ट शून्य है, तो बस एक नया असाइन करें! –

+1

बस FirstOrDefault() कहने में सक्षम होने के लिए और कभी भी शून्य न हो। मान लीजिए मैं बस एक नई एक्सटेंशन विधि लिखूंगा। –

उत्तर

25

सं default(type) हमेशा एक ही बात वापस आ जाएगी - एक "शून्य ' एड आउट "उस प्रकार का संस्करण। संदर्भ प्रकार के लिए, यह किसी ऑब्जेक्ट के लिए एक हैंडल है जो हमेशा शून्य के मान के साथ सेट होता है - जो null के बराबर होता है। एक मान प्रकार के लिए, यह हमेशा शून्य पर सेट सभी सदस्यों के साथ संरचना है।

इस व्यवहार को ओवरराइड करने का कोई तरीका नहीं है - भाषा विनिर्देश इस तरह से डिज़ाइन किया गया है।


संपादित करें:

बस FirstOrDefault() कहने के लिए और एक अशक्त कभी नहीं मिल सक्षम होने के लिए: अपनी टिप्पणी के रूप में।

मैं किसी भी मामले में इसकी अनुशंसा नहीं करता। विफलता पर null वापस करने के लिए उपयोगकर्ता FirstOrDefault() की अपेक्षा करते हैं। अपनी खुद की विस्तार विधि लिखना बेहतर होगा:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

क्षमा करें, मैं जॉन स्कीट नहीं कर रहा हूँ ...

लेकिन वैसे भी, जवाब है, "नहीं तुम नहीं कर सकते हैं"

+6

आम तौर पर जॉन स्कीट बताते हैं कि क्यों (या इस मामले में क्यों नहीं) :) – PostMan

+0

@ पोस्टमैन, जैसे मैंने कहा, मैं जॉन स्कीट नहीं हूं;)। वैसे भी, मुझे नहीं लगता कि यहां व्याख्या करने के लिए कुछ भी है ... यह संभव नहीं है। –

+0

बस इसे बनाओ, आप ठीक हो जाएंगे :) लेकिन हाँ, मैं सहमत हूं, आपके अलावा कोई स्पष्टीकरण नहीं है। (यह एक डिजाइन निर्णय के अलावा) – PostMan

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