2013-04-29 5 views
39

मुझे DateTime मान की आवश्यकता है यदि उसके पास मूल्य है या नहीं।डिफ़ॉल्ट डेटटाइम मान के लिए कैसे जांचें?

if (dateTime == default(DateTime)) 

या

if (dateTime == DateTime.MinValue) 

या एक नल DateTime?

if (nullableDateTime.HasValue) 

का उपयोग कर व्यक्तिगत तौर पर मैं, तीसरे संस्करण पसंद करेंगे अपने बहुत अच्छी पठनीय के बाद से:

मैं कई विकल्प हैं। लेकिन हमारे डेटाबेस में हमारे पास कुछ डेटाटाइम कॉलम हैं जिन्हें शून्य के रूप में परिभाषित नहीं किया गया है। तो कुछ मामलों में मुझे पहले दो विकल्पों के साथ जाना होगा।

मैंने कहीं पढ़ा है कि जेनिक्स के साथ काम करते समय default कीवर्ड का उपयोग किया जाना चाहिए, लेकिन क्या इस मामले में यह और अधिक पठनीय नहीं है? दूसरे विकल्प का उपयोग करते समय मुझे यह जानना होगा कि एक नए और खाली डेटटाइम उदाहरण का डिफ़ॉल्ट मान डेटटाइम है। MinValue जिसमें मेरे लिए कार्यान्वयन विवरण की गंध है।

तो "सर्वोत्तम अभ्यास" का उपयोग करने के लिए मुझे किस विकल्प का उपयोग करना चाहिए?

// Or private, or maybe even public 
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns 
    = DateTime.MinValue; 

ठीक है, तो मैं नाम थोड़ा कम शब्दों वाले बनाना चाहते हैं, लेकिन आपको मिल मैं क्या मतलब है:

+0

कोड ब्लॉक के बाद आपकी पहली वाक्य में, क्या आपका मतलब "दूसरा संस्करण" है, या आपका मतलब "तीसरा संस्करण" है? –

+0

इसे अपडेट किया गया;) मेरा मतलब तीसरा संस्करण था, क्योंकि संपत्ति स्पष्ट रूप से बताती है कि मैं क्या जांचना चाहता हूं: यदि चर के पास – dasheddot

+0

है और यह तब होता है जब वास्तव में जो कुछ भी वास्तव में होता है उस मिनट की तारीख में होता है? – Servy

उत्तर

42

मैं शायद यह वास्तव में स्पष्ट हो जाएगा। इससे वास्तव में कोई फर्क नहीं पड़ता कि आप उस मूल्य को कैसे शुरू करते हैं - यह स्पष्ट है कि आप क्या करने का प्रयास कर रहे हैं।

(बेशक, एक नल प्रकार किसी भी समय आप इस के लिए। मैं यह सोचते कर रहा हूँ कर सकते हैं प्रश्न पूछा गया था क्योंकि आपने कुछ स्थितियों में ऐसा नहीं सकता है का उपयोग करें।)

+0

मेरे संदर्भ के लिए (नामुमकिन डेटाटाइम कॉलम का समर्थन करने के लिए डेटाबेस को अनुकूलित करने में सक्षम नहीं) मुझे दुर्भाग्य से बिना शून्य के जाने की आवश्यकता है। तो आपका सुझाव सबसे स्वीकार्य है, इस स्पष्ट रूप से चेक के पीछे व्यापार नियम बनाकर कारण आसान महसूस किया जा सकता है। मैं इस तरह से जाऊंगा। इसे स्वीकार किया, धन्यवाद! – dasheddot

+2

@dasheddot: मैं इस तर्क को अपनी डेटा परत में भी डालूंगा और उचित के रूप में एक Nullable में परिवर्तित कर दूंगा ताकि आपका कोड हर जगह अच्छा कोड का उपयोग करेगा और आपको केवल उपर्युक्त जांच का उपयोग करना होगा। – Chris

14

मैं करने की जरूरत है DateTime मान की जांच करें यदि उसके पास कोई मूल्य है या नहीं।

आपने पाठ्यपुस्तक की स्थिति को बहुत अधिक वर्णित किया है जिसमें Nullable<DateTime> की आवश्यकता है। मैं उस विकल्प के साथ जाऊंगा।

(यदि आपको मूल्यों को एक गैर-शून्य डीबी कॉलम पर जारी रखने की आवश्यकता है, तो आपको स्पष्ट रूप से किसी प्रकार की अनुवाद परत की आवश्यकता होगी, लेकिन मैं जितना संभव हो सके डीबी के करीब किसी भी "जादू" मान को रखने की कोशिश करता हूं, और अपने सी # कोड को साफ और बेवकूफ रखने की कोशिश करें।)

4

"सर्वश्रेष्ठ" अभ्यास शून्य DateTime का उपयोग करेगा। "जादू" संख्याओं पर भरोसा न करने के कारण के लिए शून्य मूल्य ठीक बनाया गया था।

इस दृष्टिकोण के बारे में सबसे महत्वपूर्ण क्या है इसका इरादा है - मतलब आपके संदर्भ में "डिफ़ॉल्ट" दिनांक/समय के लिए क्या है?

+0

मेरे संदर्भ में इसका वास्तव में अर्थ होगा कि उपयोगकर्ता द्वारा परिभाषित कोई तारीख नहीं थी जो व्यापार नियमों की दृष्टि से मान्य है। तो मुझे लगता है कि न्यूलबल सबसे अच्छा होगा, लेकिन दुर्भाग्य से मैं डेटाबेस को अनुकूलित नहीं कर सकता, जो मुझे पहले दो संस्करणों तक चिपकने देता है। – dasheddot

0

हो सकता है कि आप getdate() के साथ अपने डेटाबेस में एक डिफ़ॉल्ट मान सेट कर सकें और फिर सभी शून्य मानों को न्यूनतम मान या जो भी चाहें अपडेट करें। कम से कम आपके पास एक शर्त होगी

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