2011-12-05 8 views
6

को जब मैं निम्नलिखित है मैं:अंतर्निहित रूप से सिस्टम को परिवर्तित नहीं कर सकता। डेटटाइम? System.DateTime

inv.RSV = pid.RSVDate 

मैं निम्नलिखित मिल: परोक्ष परिवर्तित नहीं कर सकते प्रकार System.DateTime? सिस्टम के लिए। डेटटाइम।

इस मामले में, inv.RSV डेटटाइम और pid.RSVDate डेटटाइम है?

मैं निम्नलिखित की कोशिश की लेकिन सफल नहीं था:

if (pid.RSVDate != null) 
{     

    inv.RSV = pid.RSVDate != null ? pid.RSVDate : (DateTime?)null; 
} 

तो pid.RSVDate रिक्त है, मैं आवंटित नहीं करने के लिए कुछ भी inv.RSV जो मामले में यह शून्य हो जाएगा पसंद है।

उत्तर

15

डेटटाइम शून्य नहीं हो सकता है। यह डिफ़ॉल्ट है DateTime.MinValue

if (pid.RSVDate.HasValue) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 

या, अधिक संक्षेप:

क्या आप क्या करना चाहते निम्नलिखित है

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

inv.RSV शुरू करने के लिए शून्य था। मैं कैसे कहूं कि इसे अपडेट न करें, pid.RSVDate –

+0

@NatePet के लिए कोई मान नहीं है, आप 'pid.RSVDate.HasValue' को चेक करते हैं। यदि उसके पास कोई असाइन किया गया मान नहीं है तो 'HasValue' 'false' वापस कर देगा, इस स्थिति में आप अपना अन्य मूल्य अपडेट नहीं करते हैं। आपके त्रुटि संदेश के आधार पर, 'inv.RSV' एक' डेटटाइम 'है, जिसका संभवतः शून्य मूल्य नहीं हो सकता है। यदि आप इसे शून्य करना चाहते हैं, तो इसके प्रकार को 'डेटटाइम' में बदल दें। –

+0

@NatePet, "inv.RSV शुरू करने के लिए शून्य था": क्या आप इसके बारे में निश्चित हैं? एक डेटटाइम ** शून्य शून्य नहीं हो सकता है ** –

8

आप RSV संपत्ति नल भी कर सकते हैं या मामले के लिए एक डिफ़ॉल्ट मान का चयन करने की जरूरत है जहां RSVDate शून्य है।

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

+1 शून्य सहवास के लिए +1 –

1

अगर एक एक DateTime और एक के रूप में में निर्धारित किये जाने से निर्धारित किये जाने से DateTime? है, तो आप, इस्तेमाल कर सकते हैं अगर

int.RSV = pid.RSVDate.GetValueOrDefault(); 

यह एक अधिभार है कि आप डिफ़ॉल्ट मान निर्दिष्ट करने की अनुमति देता का समर्थन करता है DateTime के लिए डिफ़ॉल्ट आदर्श नहीं है।

तो pid.RSVDate रिक्त है, मैं आवंटित नहीं करने के लिए inv.RSV जो कुछ भी मामले में यह शून्य हो जाएगा पसंद है।

int.RSV रिक्त नहीं हो जाएगा, जैसा कि आप पहले से ही कहा है यह DateTime, नहीं एक नल प्रकार है। यदि यह आप द्वारा आवंटित कभी नहीं रहा है, यह यह के प्रकार है, जो DateTime.MinValue है, या 1 जनवरी के डिफ़ॉल्ट मान, 0001

inv.RSV के साथ शुरू अशक्त था होगा। मैं कहता हूँ यह कैसे अद्यतन नहीं करते हैं वहाँ pid.RSVDate

के लिए कोई मूल्य नहीं फिर है, यह बस , नहीं किया जा सकता संपत्ति के अपने विवरण दिया। हालांकि, अगर आम तौर पर आप inv.RSV को अपडेट नहीं करना चाहते हैं तो pid.RSVDate शून्य है (और आप बस अपने शब्दों में मिश्रित हो रहे हैं), तो आप असाइनमेंट के चारों ओर एक if जांच लेंगे।

if (pid.RSVDate != null) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 
2

क्योंकि inv.RSV एक शून्य क्षेत्र नहीं है, यह शून्य नहीं हो सकता है। जब आप अपनी ऑब्जेक्ट को प्रारंभ करते हैं, तो यह एक डिफ़ॉल्ट आविष्कार होता है।एक खाली दिनांक समय के लिए आरएसवी, एक ही आप अगर आप ने कहा

inv.RSV = new DateTime() 

तो, आप pid.RSV को inv.RSV सेट करना चाहते हैं, तो यह NULL नहीं है, या डिफ़ॉल्ट दिनांक समय मूल्य यह मान शून्य होगा मिलेगा के रूप में , ऐसा करते हैं:

inv.RSV = pid.RSVDate.GetValueOrDefault() 
0

pid.RSVDatenull जा रहा है की संभावना है, जबकि inv.RSV नहीं है, तो क्या होगा करता है तो RSVDatenull है?

if(pid.RSVDate.HasValue) 
    inv.RSV = pid.RSVDate.Value; 

लेकिन क्या inv.RSV का मूल्य अगर RSVDate रिक्त है हो सकता है -

यदि मूल्य से पहले रिक्त है जांच करने की आवश्यकता? क्या हमेशा इस संपत्ति में एक तिथि होने जा रहा है? यदि ऐसा है, तो आप ?? ऑपरेटर का उपयोग डिफ़ॉल्ट रूप से असाइन करने के लिए कर सकते हैं यदि आप चाहते हैं।

pid.RSV = pid.RSVDate ?? myDefaultDateTime; 
संबंधित मुद्दे