VB.NET - Nullable DateTime und Ternary Operator

8

Ich habe Probleme mit einer Nullable DateTime in VB.NET (VS 2010).

Methode 1

%Vor%

Methode 2

%Vor%

Wenn eine leere Zeichenfolge angegeben wird Methode 1 weist gauge.LastCalibrationDate einen Wert Null (Nothing) zu, aber Methode 2 weist ihm den Wert DateTime.MinValue zu.

An anderen Stellen in meinem Code habe ich:

%Vor%

Dies weist Null (Nothing) von einem ternären Operator korrekt einer Nullable DateTime zu.

Was vermisse ich? Danke!

    
anonymous 15.11.2010, 23:29
quelle

2 Antworten

14

Ich gebe zu, dass ich kein Experte darin bin, aber anscheinend stammt er von zwei Dingen ab:

  1. Der ternäre Operator If kann nur einen Typ zurückgeben, in diesem Fall einen Datumstyp und keinen Nullwerttyp
  2. Der VB.Net Nothing -Wert ist nicht tatsächlich null , sondern entspricht dem Standardwert des angegebenen Typs, in diesem Fall ein Datum, kein Nullable-Datum. Daher der Mindestwert für das Datum.

Ich habe die meisten Informationen für diese Antwort aus diesem SO-Post abgeleitet: Ternärer Operator VB vs C #: Warum wird in Ganzzahl und nicht Integer aufgelöst?

Hoffe, dass das hilft und dass jemand wie Joel Coehoorn mehr Licht auf das Thema werfen kann.

    
Bob Mc 16.11.2010, 01:01
quelle
15

Bob Mc hat Recht. Achten Sie besonders auf seinen zweiten Punkt - das ist in C # nicht der Fall.

Sie müssen Nothing auf eine nullbare DateTime erzwingen, indem Sie sie wie folgt umwandeln:

%Vor%

Hier ist ein Ausschnitt, um zu demonstrieren:

%Vor%

Anstelle des Castings können Sie auch ein neues Nullable angeben: New Nullable(Of DateTime) oder New DateTime?() . Das letztere Format sieht ein wenig seltsam aus, aber es ist gültig.

    
Ahmad Mageed 16.11.2010 03:45
quelle