2010-11-15 34 views
7

VB.NET'te (VS 2010) Nullable DateTime ile ilgili sorunları yaşıyorum.VB.NET - Null'lu DateTime ve Üçlü Operatör

Yöntem 1

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

Yöntem 2

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

Yöntem 1 gauge.LastCalibrationDate bir boş (şey) bir değer atar ancak Yöntem 2 DateTime.MaxValue'dan atar boş bir dizge zaman. Benim kodunda başka yerlerde

Ben:

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

Bu doğru bir null DateTime için bir Üçlü Operatörü dan Null (Nothing) atar.

Neyi eksik? Teşekkürler!

cevap

13

Bu konuda bana bir uzman değilim itiraf edecek, ama görünüşe göre iki şeyden kaynaklanıyor: bu durumda, yalnızca bir tür bir tarih türü değil dönebilirsiniz

  1. If üçlü operatör nullable date type
  2. VB.Net Nothing değeri aslında null değil, belirtilen türün varsayılan değerine eşdeğerdir, bu durumda bir tarih değil, bir tarih olamaz. Bu nedenle tarih minimum değeri.

Bu SO sonrası bu yanıt için bilgilerin çoğunu türetilmiş: Ternary operator VB vs C#: why resolves to integer and not integer?

Umut bu Joel Coehoorn gibi birinin konuda daha fazla ışık tutabilir yardımcı olur ve.

14

Bob Mc doğrudur. Onun ikinci noktasına ekstra dikkat - C# durum böyle değil.

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) 

Bunun yerine de ilan edebilir döküm: Burada

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

göstermek için pasajıdır: Yapmanız Gerekenler

aşağıdaki gibi döküm yoluyla null bir DateTime için kuvvet Nothing olduğunu Yeni bir null: New Nullable(Of DateTime) veya New DateTime?(). İkinci format biraz garip görünüyor ama geçerli.

+2

+1 İstenen sonucu üretecek geçici çözümü ekleyerek güzel iş. –