नया दिनांक समय () बनाम डिफ़ॉल्ट (दिनांक समय)


196

क्या इनमें से किसी एक को दूसरे पर चुनने का कारण है?

DateTime myDate = new DateTime();

या

DateTime myDate = default(DateTime);

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


28
जो बराबर है DateTime.MinValue, इसलिए आप भी बस कर सकते हैं DateTime myDate = DateTime.MinValue: /
लॉयड

20
@ लॉयड अधिकांश समय ... लेकिन एक डिफ़ॉल्ट पैरामीटर के रूप में नहीं है DateTime.MinValue एक संकलन समय स्थिर नहीं है - लेकिन डिफ़ॉल्ट (DateTime) / नया DateTime () है।
रिकियॉब

12
बस @ रिकिबॉब की उत्कृष्ट टिप्पणी को स्पष्ट करने के लिए, क्योंकि यह महत्वपूर्ण है: यदि आप एक वैकल्पिक पैरामीटर के साथ एक विधि बना रहे हैं, तो आप केवल default(DateTime)या तो उपयोग कर सकते हैं या new DateTime()। वे दोनों संकलित समय स्थिरांक हैं , जो वैकल्पिक पैरामीटर मानों के लिए आवश्यक हैं। यदि संकलन समय स्थिरांक की आवश्यकता नहीं है, तो default(DateTime), new DateTime()है, और DateTime.MinValueपरस्पर विनिमय कर रहे।
लीनन

जवाबों:


200

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

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


29
FWIW; C # 6 में यह व्यवहार बदल जाएगा। सी # 6 स्ट्रक्चर्स के लिए पैरामीटर रहित कंस्ट्रक्टर्स का परिचय देता है, जो व्यवहार newको अलग करने की अनुमति देता default(T)है।
vcsjones

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

16
@vcsjones को C # 6.0 की अंतिम रिलीज़ से पहले हटा दिया गया था।
नवाफल

5
@nawfal हाँ। शायद सबसे अच्छा है कि यह भी किया था।
vcsjones

इस उत्तर सिर्फ गलत IMO है: दो बातें शब्दार्थ समान हैं, लेकिन उनमें से कोई भी एक निर्माता कहता है - दोनों वाक्य रचना विकल्पों का उपयोगinitobj
मार्क Gravell

22

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

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

    private void MyMethod(DateTime syncedTime = DateTime.MinValue)

यह पंक्ति संकलित करेगी:

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

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

16

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

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

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

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


2
ओपी के सवाल का जवाब कैसे देता है?
मो पटेल

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

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

यह ध्यान रखें कि यह DateTimeKind.Utc के बजाय DateTimeKind.UTC है
रॉबर्टो

@ रॉबर्टो धन्यवाद, निश्चित।
jpaugh

-3

इसे समझने का सबसे सरल तरीका यह है कि डेटटाइम एक संरचना है। जब आप एक संरचना को इनिशियलाइज़ करते हैं तो वह इनिशियलाइज़ होता है कि यह न्यूनतम मूल्य है:DateTime.Min

इसलिए default(DateTime)और new DateTime()और के बीच कोई अंतर नहीं हैDateTime.Min


3
नहीं, संरचनाएं हैं को उनके न्यूनतम मूल्य के लिए आवश्यक नहीं । वे सभी बिट्स शून्य होने के लिए आरंभिक हैं। कुछ प्रकारों के लिए, यह उनका सबसे कम मूल्य है, दूसरों के लिए, जैसे कि संख्यात्मक प्रकार जो नकारात्मक हो सकते हैं, यह उनके न्यूनतम मूल्य के पास नहीं है। और निश्चित रूप से, दूसरों को अभी भी नहीं तुलनीय हो जाएगा और नहीं होगा है एक "कम से कम" मूल्य।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.