2010-11-15 18 views
7

मुझे वीबीएनईटी (वीएस 2010) में एक निरर्थक दिनांक समय के साथ समस्याएं आ रही हैं।वीबीएनईटी - निरर्थक दिनांक समय और टर्नरी ऑपरेटर

विधि 1

If String.IsNullOrEmpty(LastCalibrationDateTextBox.Text) Then 
    gauge.LastCalibrationDate = Nothing 
Else 
    gauge.LastCalibrationDate = DateTime.Parse(LastCalibrationDateTextBox.Text) 
End If 

विधि 2

gauge.LastCalibrationDate = If(String.IsNullOrEmpty(LastCalibrationDateTextBox.Text), Nothing, DateTime.Parse(LastCalibrationDateTextBox.Text)) 

जब एक खाली स्ट्रिंग विधि 1 gauge.LastCalibrationDate करने के लिए एक नल (कुछ नहीं) मूल्य प्रदान करती है लेकिन विधि 2 यह प्रदान करती है DateTime.MinValue दिया।

मेरी कोड में अन्य स्थानों में मेरे पास है:

LastCalibrationDate = If(IsDBNull(dr("LastCalibrationDate")), Nothing, dr("LastCalibrationDate")) 

यह सही ढंग से एक Nullable दिनांक समय के लिए एक त्रिगुट ऑपरेटर से नल (कुछ नहीं) प्रदान करती है।

मुझे क्या याद आ रही है? धन्यवाद!

उत्तर

13

मैं मानता होगा कि मैं इस पर एक विशेषज्ञ नहीं हूँ, लेकिन जाहिरा तौर पर यह दो बातें की वजह से उपजी:

  1. If त्रिगुट ऑपरेटर केवल एक ही प्रकार, इस मामले में दिनांक प्रकार, एक लौट सकते हैं नहीं शून्य तिथि दिनांक
  2. वीबी.Net Nothing मान वास्तव में null नहीं है लेकिन निर्दिष्ट प्रकार के डिफ़ॉल्ट मान के बराबर है, इस मामले में एक तिथि, एक शून्य तिथि नहीं है। इसलिए तारीख न्यूनतम मूल्य।

मैं इस अतः पद से इस उत्तर के लिए जानकारी का सबसे व्युत्पन्न: Ternary operator VB vs C#: why resolves to integer and not integer?

आशा इस मदद करता है और कि जोएल Coehoorn की तरह किसी विषय पर और अधिक प्रकाश डाला जा सकता है।

14

बॉब मैक सही है। अपने दूसरे बिंदु पर अतिरिक्त ध्यान दें - यह सी # में मामला नहीं है।

Dim myDate As DateTime? 
' try with the empty string, then try with DateTime.Now.ToString ' 
Dim input = "" 
myDate = If(String.IsNullOrEmpty(input), CType(Nothing, DateTime?), DateTime.Parse(input)) 
Console.WriteLine(myDate) 

इसके बजाय कास्टिंग आप भी घोषणा कर सकते हैं की:

gauge.LastCalibrationDate = If(String.IsNullOrEmpty(LastCalibrationDateTextBox.Text), CType(Nothing, DateTime?), DateTime.Parse(LastCalibrationDateTextBox.Text)) 

यहाँ प्रदर्शित करने के लिए एक टुकड़ा है:

आप क्या करने की जरूरत एक नल दिनांक समय के लिए बल Nothing यह कास्टिंग इस प्रकार से है एक नया शून्य: New Nullable(Of DateTime) या New DateTime?()। बाद वाला प्रारूप थोड़ा अजीब दिखता है लेकिन यह मान्य है।

+2

+1 अच्छा काम जो वर्कअराउंड जोड़ रहा है जो वांछित परिणाम देगा। –

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