En comparant les valeurs null DateTime?
La recherche d'une meilleure façon de comparer nullable date temps que les suivantes:
Des suggestions?
//myobject.ExpireDatetime is of DateTime?
//
if (!myobject.ExpireDateTime.IsNull() && DateTime.Compare((DateTime)myobject.ExpireDateTime, DateTime.Now.ToUniversalTime()) < 0)
{ //error! }
Édité: Désolé pour la confusion...myobject.ExpireDatetime est de type
DateTime.
- En C#, le mot
object
est un mot-clé et il ne peut pas être utilisé comme un identifyer (sauf si vous l'écrivez@object
). Je pense qu'il est difficile de savoir si vous avez une boîteDateTime
qui peut être une référence null, ou si vous avez une unboxed "vrai" nullableDateTime
(DateTime?
).
Vous devez vous connecter pour publier un commentaire.
Votre question n'est pas très clair pour moi, mais si nous avons
c'est OK pour dire juste
Ce sera OK si
ExpireDateTime
estnull
(HasValue
est faux). Certains inexpérimentés, les développeurs auront de la difficulté à comprendre levée des opérateurs, afin de le rendre plus clair, vous pouvez écrireC'est la même chose, mais plus facile à lire et à comprendre.
Jamais écrire
.Value
si le nullable peut être null, bien sûr. Vous recevrez unInvalidOperationException
"Nullable objet doit avoir une valeur" si vous le faites.x < y
etx == y
etx > y
sont tousfalse
.minDate = d1 < d2 ? d1 : d2
où tous les trois dates sont nullable - dans ce cas, je veuxminDate
recevoir une date valide, le cas échéant, mais non nulles, à moins que les deux d1 et d2 sont les valeurs null.!(ExpireDateTime >= DateTime.UtcNow)
qui est le même queExpireDateTime < DateTime.UtcNow
sinull
est pas en cause, mais a l'inverse de la valeur lorsquenull
est impliqué. Cependant, il peut être plus facile à lire quelque chose comme!ExpireDateTime.HasValue || ExpireDateTime.Value < DateTime.UtcNow
, selon le goût de chacun.Je vous recommande d'utiliser les éléments suivants:
Utiliser le
Value
propriété de la nullable:System.Object
ne dispose pas d'unstatic
membre appeléExpireDateTime
(donc ne parvenez toujours pas à compiler)..
). Par exemple(new object()).ExpireDateTime()
outypeof(object).ExpireDateTime()
ou@object.ExpireDateTime()
tous peut compiler avec certains (vraiment fou) méthode d'extension. Mais il ya quelque chose de mal avec justeobject
. D'ailleurs, si c'est une méthode, vous ne pouvez pas dire.IsNull
sans d'abord invocationExpireDateTime
. En bref, il ne peut jamais être valide, tel qu'il est.object
"dot"ExpireDateTime
dans le code.Si
ExpireDateTime
est unNullable<DateTime>
je ferais suivant à la place:Le compilateur ascenseurs variables et génère du code pour vérifier les valeurs null.
Sachant cela, vous pouvez écrire du code simple.
Si d est nulle, tout sera faux, sinon il va travailler comme d'habitude DateTime comparaison.