2010-01-27 5 views
11

अगर मैं एक वर्ग "TimeLastAccessed" कहा जाता है पर दिनांक समय, यह अधिक भावना इस दिनांक समय व्यर्थ होने के लिए करना होता था:क्या डेटटाइम का उपयोग करना बेहतर है। MinValue या एक निरर्थक डेटटाइम?

public DateTime? TimeLastAccessed { get; set } 

if (TimeLastAccessed == null) // ... handle it 

से संकेत मिलता है यह तक पहुँचा नहीं किया गया है या DateTime.MinValue

के लिए जाँच करने के लिए
public DateTime TimeLastAccessed { get; set; } 

if (TimeLastAccessed == DateTime.MinValue) // ... handle it 

?

+1

या TimeCreated को सेट द्वारा TimeLastAccessed चाहिए जब वस्तु है

इस उदाहरण में, के लिए परीक्षण "समाप्त हो चुका है" मानक दिनांक समय के लिए आसान है शुरुआत में – benPearce

उत्तर

12

यह नालीबल का उपयोग करने के लिए और अधिक समझ में आता है। यह Nullable का विचार है - यह व्यक्त करने के लिए कि किसी मान प्रकार का कोई वैध मान नहीं है। MinValue का उपयोग करने के लिए उन मामलों के लिए एक पैच है जिनके पास आपके पास शून्य नहीं है।

+0

बनाया गया यह भी बहुत जादू है। क्या होगा यदि कोई डेटटाइम व्यक्त करना चाहता था। MinValue, तो इसे अनदेखा कर दिया जाएगा। एसक्यूएल सर्वर नोट के लिए – Ian

0

कुछ ऐसा जो कुछ भी मौजूद नहीं हो सकता है? क्या आपकी संपत्ति वास्तव में कुछ सूची LastAccessDateByCustomerOrClient है?

और आपके मामले में मुझे लगता है कि आप चाहते हैं ... आपके परीक्षण में == शून्य के बजाय हैसवेल्यू। यदि आप कक्षा का उपयोग करने जा रहे हैं, तो इसकी सुविधाओं का पूर्ण उपयोग करें। यह शायद लगभग एक ही कोड के लिए संकलित है लेकिन ...

6

मैं सहमत हूं कि Nullable < डेटटाइम> अन्य विचारों की अनुपस्थिति में बेहतर विकल्प है।

हालांकि आपको अन्य प्रणालियों पर विचार करने की आवश्यकता है जिनके साथ आपको अंतःक्रिया करने की आवश्यकता है।

उदाहरण के लिए:

  • अगर आप कॉम ग्राहकों को अपनी नेट दिनांक समय उजागर कर रहे हैं, तो आप Nullable < दिनांक समय का उपयोग करने के लिए सक्षम नहीं होंगे>।

  • यदि आप SQL सर्वर डेटाबेस में मान संग्रहीत कर रहे हैं, तो याद रखें कि SQL सर्वर डेटटाइम को संग्रहीत नहीं कर सकता है। MinValue डेटटाइम के रूप में।

एक और मुद्दा विचार करने के लिए है कि Nullable एक एपीआई के कॉल करने के लिए कुछ जटिलता जोड़ सकते हैं: वे विचार करने के लिए कैसे अशक्त मामले संभाला जाना चाहिए पड़ सकता है। कुछ मामलों में यह शून्य मामले के लिए डिफ़ॉल्ट मान का उपयोग करने के लिए आसान हो सकता है। उदाहरण के लिए, एक ऐसी कक्षा पर विचार करें जो एक संपत्ति "समाप्ति तिथि" का खुलासा करती है, जहां यह इंगित करने के लिए मूल्य की आवश्यकता होती है कि आइटम कभी समाप्त नहीं होता है।

एक दृष्टिकोण Nullable<DateTime> का उपयोग करना है जो "कभी समाप्त नहीं होता" का प्रतिनिधित्व करता है। एक वैकल्पिक दृष्टिकोण DateTime.MaxValue के साथ मानक दिनांक समय का उपयोग करना है "कभी समाप्त नहीं होता"।

if (item.ExpiryDate <= DateTime.Today) ... 
Nullable<DateTime> के लिए की तुलना में

:

if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ... 
+1

+1 –

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