Sonntag, Dezember 8, 2019

VB.NET – Nullable DateTime und Ternärer Operator

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

Methode 1

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

Methode 2

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

Gegeben, wenn eine leere Zeichenfolge Methode 1 weist eine Null (Nichts) Wert zu Messen.LastCalibrationDate aber Methode 2 weist die DateTime.MinValue.

In anderen Orten in meinem code habe ich:

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

Dies richtig weist Null (Nichts) aus einer Ternären Operator, um eine Nullable DateTime.

Was bin ich? Danke!

InformationsquelleAutor anonymous | 2010-11-15

2 Kommentare

  1. 15

    Ich gebe zu, ich bin kein Experte auf diesem, aber anscheinend ergibt sich aus zwei Dingen:

    1. Die If ternären operator kann zurückkehren, nur eine Art, in diesem Fall ein Datum, nicht eine nullable-Datentyp
    2. Die VB.Net Nothing Wert ist eigentlich nicht null aber entspricht dem Standardwert des angegebenen Typs, in diesem Fall ein Datum, nicht eine null-Datum. Daher das Datum minimum Wert.

    Ich abgeleitet, die die meisten Informationen für diese Antwort von diesem SO posten: Ternärer operator VB vs. C#: warum wird zu integer und nicht integer?

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

  2. 15

    Bob Mc ist korrekt. Achten Sie besonders auf seine zweite Punkt – dies ist nicht der Fall in C#.

    Was Sie tun müssen, ist die Kraft Nothing zu einem nullable DateTime durch Gießen Sie es wie folgt:

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

    Hier ist ein Ausschnitt zu zeigen:

    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)

    Statt Gießen kann man auch deklarieren Sie eine neue nullable: New Nullable(Of DateTime) oder New DateTime?(). Letzteres format sieht ein wenig seltsam, aber es ist gültig.

    • +1 Nice job hinzufügen die Problemumgehung, die zum gewünschten Ergebnis führt.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...