2012-12-19 14 views
132

क्या इनमें से किसी एक को चुनने का कोई कारण है?नया डेटटाइम() बनाम डिफ़ॉल्ट (डेटटाइम)

DateTime myDate = new DateTime(); 

या

DateTime myDate = default(DateTime); 

उन दोनों बराबर 1/1/0001 12:00:00 AM हैं।

+26

कौन सा 'DateTime.MinValue' के बराबर है, तो आप भी सिर्फ' कर सकता है दिनांक समय myDate = दिनांक समय .MinValue' साथ ही:/ – Lloyd

+13

@Lloyd अधिकांश समय ... लेकिन डिफ़ॉल्ट पैरामीटर के रूप में नहीं DateMime.MinValue एक संकलित समय स्थिर नहीं है - लेकिन डिफ़ॉल्ट (दिनांक समय)/नया दिनांक समय() है। – Ricibob

+7

बस @ रिसीबोब की उत्कृष्ट टिप्पणी को स्पष्ट करने के लिए, क्योंकि यह महत्वपूर्ण है: यदि आप वैकल्पिक पैरामीटर के साथ कोई विधि बना रहे हैं, तो आप केवल 'डिफ़ॉल्ट (दिनांक समय) 'या' नई दिनांक समय() 'का उपयोग कर सकते हैं। वे वैकल्पिक पैरामीटर मानों के लिए आवश्यक * संकलित समय स्थिरांक * दोनों हैं। यदि संकलन समय स्थिरांक की आवश्यकता नहीं है, तो 'डिफ़ॉल्ट (दिनांक समय) ',' नया दिनांक समय() ', और' दिनांक समय। MinValue' विनिमेय हैं। – leanne

उत्तर

139

नहीं, वे समान हैं।

default(), किसी भी मूल्य प्रकार के लिए (DateTime एक मान प्रकार है) हमेशा पैरामीटर रहित कन्स्ट्रक्टर को कॉल करेगा।

+22

एफडब्ल्यूआईडब्ल्यू; सी # 6 में यह व्यवहार बदल जाएगा। सी # 6 स्ट्रक्चर के लिए [पैरामीटर रहित कन्स्ट्रक्टर] (https://roslyn.codeplex.com/discussions/562559) प्रस्तुत करता है, जो 'new' के व्यवहार को 'डिफ़ॉल्ट (टी)' से अलग करने की अनुमति देता है। – vcsjones

+19

कोई तर्क दे सकता है कि 'डिफ़ॉल्ट (दिनांक समय) 'प्रोग्रामर के इरादे का अधिक वर्णनात्मक है, इसलिए आम तौर पर अधिक अनुकूल है। –

+8

@vcsjones हालांकि इसे सी # 6.0 की अंतिम रिलीज से पहले हटा दिया गया था। – nawfal

13

उत्तर नहीं है। ध्यान रखें कि दोनों मामलों में, mdDate.Kind = DateTimeKind.Unspecified

इसलिए यह बेहतर हो सकता है निम्न कार्य करें:

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

myDate.Kind संपत्ति केवल पढ़ने के लिए है, इसलिए के बाद निर्माता कहा जाता है इसे बदला नहीं जा सकता है।

+2

ओपी के सवाल का जवाब कैसे देता है? –

+32

कृपया मेरे उत्तर के पहले 4 शब्द देखें। –

+2

मैं इसके खिलाफ बहस करता हूं। डिफ़ॉल्ट 'डेटटाइम' एक मान-सेट-सेट मान के रूप में उपयोगी है, जिसमें 'डिफ़ॉल्ट (दिनांक समय) 'की एक साधारण तुलना है। एक गैर-डिफ़ॉल्ट '01/01/0001' मान क्या उपयोग है? – Rawling

16

यदि आप किसी विधि में डेटटाइम पैरामीटर के लिए डिफ़ॉल्ट मान का उपयोग करना चाहते हैं, तो आप केवल डिफ़ॉल्ट (दिनांक समय) का उपयोग कर सकते हैं।

निम्न पंक्ति संकलन नहीं होगा:

private void MyMethod(DateTime syncedTime = DateTime.MinValue) 

इस लाइन संकलन होगा:

private void MyMethod(DateTime syncedTime = default(DateTime)) 
+0

वह जवाब था जिसे मैं ढूंढ रहा था। धन्यवाद! – GigaKatowice

+0

बेशक डेटटाइम। MinValue संकलित नहीं करता है? वैकल्पिक पैरामीटर संकलन-समय स्थिरांक होना चाहिए, जो MinValue नहीं है। डिफ़ॉल्ट (डेटटाइम) और नया डेटटाइम() दोनों मान्य हैं हालांकि (जो वास्तव में मजेदार है, क्योंकि कॉन्स डेटटाइम x = डिफ़ॉल्ट (डेटटाइम) मान्य नहीं है, क्योंकि डेटटाइम मान संकलन-समय स्थिरांक के रूप में घोषित नहीं किए जा सकते हैं) –

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