2010-06-16 2 views
3

Je suis nouveau sur C#. Je compare deux dates où l'un est entré par l'utilisateur et l'autre est la date de sytem. J'ai le code qui fonctionne tel qu'il est où l'obstacle s'est produit est de savoir comment répondre aux valeurs nulles. le code de base que j'ai est:comparer des dates en C# prenant en compte la valeur nulle

if (mydate.ToShortDateString() != TodaysDate.ToShortDateString()) 

{ 
//Error Messaage 
} 

else 
{ 
//do some code 
} 

Tous les commentaires seront appréciés

+2

Il n'est pas possible qu'un DateTime soit nul est-ce? DateTimes sont des types de valeur. Vous pouvez également comparer directement les objets DateTime, c'est-à-dire 'if (mydate == TodaysDate)' –

+0

@Phil DateTime ne peut pas être nul, mais DateTime? peut être - types nullable. En comparant également DateTimes les uns contre les autres prend en compte la date et l'heure complètes, pas nécessairement seulement la date comme elluded à l'OP. –

Répondre

0

Vous pouvez déclarer mydate comme DateTime?, il peut contenir des valeurs nulles. En ce qui concerne la gestion de l'erreur, cela dépend si une valeur nulle pour mydate est considérée ou non comme une erreur. Si c'est une erreur, vous pouvez faire:

if (mydate == null || mydate.ToShortDateString() != TodaysDate.ToShortDateString()) { 
    // error 
} 

Si ce n'est pas une condition d'erreur, vous pouvez faire:

if (mydate != null && mydate.ToShortDateString() != TodaysDate.ToShortDateString()) { 
    // error 
} 

Si vous ne déclarez pas mydate comme DateTime? mais simplement déclarer comme DateTime , vous pouvez vérifier DateTime.MinValue, comme celui-ci (DateTime.MinValue est la valeur par défaut pour une variable DateTime):

if (mydate == DateTime.MinValue || mydate.ToShortDateString() != TodaysDate.ToShortDateString()) { 
    // error 
} 
2

Pourquoi les convertissez-vous en ficelles? Pourquoi ne pas simplement comparer les parties de date comme dans date1.Date != date2.Date.

+0

Je me demandais cela. Peut-être ne comparer que la partie date du DateTime? –

+1

@Phil: Je suppose que oui, mais c'est à ça que sert la propriété 'Date'. –

0

Utilisez le ?? opérateur:

if ((mydate??DateTime.MinValue).ToShortDateString() != TodaysDate.ToShortDateString()) 
{ 
//Error Messaage 
} 

else 
{ 
//do some code 
} 
Questions connexes