Ich würde eine leere String-Variable wie folgt deklarieren:
string myString = string.Empty;
Gibt es ein Äquivalent für eine 'DateTime'-Variable?
Update:
Das Problem ist, dass ich diese 'DateTime' als Parameter für eine 'StoredProcedure' in SQL benutze.
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
Wenn ich diesen Code ausführte, wurde eine Ausnahme festgestellt, die besagte, dass 'StoredProcedure' einen '@SurgeryDate'-Parameter erwartete.
Da DateTime
ein Werttyp ist, können Sie ihm nicht null
zuweisen, aber genau für diese Fälle (Abwesenheit eines Werts) Nullable<T>
wurde eingeführt - verwenden Sie stattdessen eine nullbare DateTime
:
DateTime? myTime = null;
Sie haben 2 Möglichkeiten:
DateTime date = DateTime.MinValue;
Dies funktioniert, wenn Sie jede X-Zeit etwas tun müssen (da Sie MinValue
immer über sein werden), aber tatsächlich subtile Fehler verursachen kann (z. B. die Verwendung einiger Operatoren, die zuerst prüfen, ob Sie MinValue
sind), wenn Sie nicht vorsichtig sind .
Und Sie können Nullable
verwenden:
DateTime? date = null;
Welches ist Nizza und vermeidet die meisten Probleme, während nur 1 oder 2 eingeführt wird.
Es hängt wirklich davon ab, was Sie erreichen wollen.
Sie können eine DateTime-Variable auf '1/1/0001 00:00:00' setzen, die Variable selbst kann jedoch nicht null sein. Um diese MinTime zu erhalten, verwenden Sie:
DateTime variableName = DateTime.MinValue;
Möglicherweise möchten Sie eine nullfähige Datumszeit verwenden. Datetime? someDate = null;
In solchen Fällen finden Sie möglicherweise Fälle von Personen, die DateTime.Max
oder DateTime.Min
verwenden, aber ich bezweifle, dass Sie dies tun möchten. Dies führt zu Fehlern in Edge-Fällen, schwer lesbarer Code usw.
Die von Ihnen verwendete Methode (AddWithValue
) konvertiert null
-Werte nicht in Datenbank-Nullwerte. Sie sollten stattdessen DBNull.Value
verwenden:
myCommand.Parameters.AddWithValue(
"@SurgeryDate",
someDate == null ? DBNull.Value : (object)someDate
);
Dadurch wird der Wert someDate
übergeben, wenn es sich nicht um null
handelt, ansonsten um DBNull.Value
. In diesem Fall wird der korrekte Wert an die Datenbank übergeben.
Wenn Sie das Datum auf einstellen
DateTime dNewDate = new DateTime();
Der Wert ist auf {1/1/0001 12:00:00} gesetzt.
Entweder:
DateTime dt = new DateTime();
oder
DateTime dt = default(DateTime);
Option 1: Verwenden Sie eine nullfähige DateTime?
Option 2: Verwenden Sie DateTime.MinValue
Persönlich würde ich Option 1 vorziehen.
Ein string
ist eine Folge von Zeichen. Daher ist es sinnvoll, ein leeres string
zu haben, bei dem es sich lediglich um eine leere Zeichenfolge handelt.
Aber DateTime
ist nur ein einzelner Wert. Daher ist es nicht sinnvoll, von einem „leeren“ DateTime
zu sprechen.
Wenn Sie das Konzept „Kein Wert“ darstellen möchten, wird dies in .Net als null
dargestellt. Und wenn Sie dies mit Werttypen verwenden möchten, müssen Sie sie explizit als nullfähig machen. Das bedeutet entweder Nullable<DateTime>
oder den entsprechenden DateTime?
.
DateTime
hat (wie alle Werttypen) auch einen Standardwert , der nicht initialisierten Feldern zugewiesen ist und Sie können ihn auch über new DateTime()
oder default(DateTime)
erhalten. Sie möchten es jedoch wahrscheinlich nicht verwenden, da es ein gültiges Datum darstellt: 1.1.0001 0:00:00.
Es gibt kein leeres Datum an sich, meinen Sie so etwas wie:
DateTime? myDateTime = null;
Der .addwithvalue benötigt dbnull . Sie könnten so etwas tun:
DateTime? someDate = null;
//...
if (someDate == null)
myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);
oder verwenden Sie eine Methodenerweiterung ...
public static class Extensions
{
public static SqlParameter AddWithNullValue(this SqlParameterCollection collection, string parameterName, object value)
{
if (value == null)
return collection.AddWithValue(parameterName, DBNull.Value);
else
return collection.AddWithValue(parameterName, value);
}
}