Existe-t-il un moyen simple dans C # de vérifier si une valeur a été affectée à une instance DateTime?
Le seul moyen d'avoir une variable à laquelle aucune valeur n'a été affectée en C # est de le considérer comme une variable locale. Dans ce cas, au moment de la compilation, vous pouvez dire qu'elle n'est pas définitivement assignée en essayant de la lire: )
Je suppose que vous voulez vraiment Nullable<DateTime>
(ou DateTime?
avec le sucre syntaxique C #) - créez null
pour commencer, puis affectez une valeur normale DateTime
(qui sera convertie en conséquence). Ensuite, vous pouvez simplement comparer avec null
(ou utiliser la propriété HasValue
) pour voir si une valeur "réelle" a été définie.
tu veux dire comme ça:
DateTime datetime = new DateTime();
if (datetime == DateTime.MinValue)
{
//unassigned
}
ou vous pouvez utiliser Nullable
DateTime? datetime = null;
if (!datetime.HasValue)
{
//unassigned
}
mettre ça quelque part:
public static class DateTimeUtil //or whatever name
{
public static bool IsEmpty(this DateTime dateTime)
{
return dateTime == default(DateTime);
}
}
ensuite:
DateTime datetime = ...;
if (datetime.IsEmpty())
{
//unassigned
}
Utilisation Nullable<DateTime>
si possible.
Je viens de découvrir que GetHashCode () pour une date/heure non assignée est toujours zéro. Je ne suis pas sûr que ce soit un bon moyen de vérifier la date et l'heure null, car je ne trouve aucune documentation sur la raison pour laquelle ce comportement est affiché.
if(dt.GetHashCode()==0)
{
Console.WriteLine("DateTime is unassigned");
}
DateTime est un type de valeur, il ne peut donc jamais être null. Si vous pensez DateTime? (Nullable) vous pouvez utiliser:
DateTime? something = GetDateTime();
bool isNull = (something == null);
bool isNull2 = !something.HasValue;
Je dirais que la valeur par défaut est toujours new DateTime()
. Donc on peut écrire
DateTime datetime;
if (datetime == new DateTime())
{
//unassigned
}
Je préfère généralement, dans la mesure du possible, utiliser la valeur par défaut des types de valeur pour déterminer s'ils ont été définis. Cela n’est évidemment pas possible tout le temps, surtout avec ints - mais pour DateTimes, je pense que réserver la MinValue pour indiquer qu’elle n’a pas été modifiée est suffisant. L'avantage de ceci sur nullables est qu'il y a un endroit de moins où vous obtiendrez une exception de référence nulle (et probablement beaucoup d'endroits où vous n'avez pas à vérifier la valeur de null avant d'y accéder!)