138 votes

Comment utiliser DateTime.TryParse avec Nullable <DateTime> ?

Je souhaite utiliser la méthode DateTime.TryParse pour obtenir la valeur datetime d'une chaîne dans un élément Nullable. Mais quand j'essaye ceci:

 DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
 

le compilateur me dit que "l'argument 'out' n'est pas classé comme une variable". Je ne sais pas ce que je dois faire ici. J'ai aussi essayé:

 out (DateTime)d.Value
 

et ça ne marche pas non plus. Des idées?

186voto

Jon Skeet Points 692016

Comme le dit Jason, vous pouvez créer une variable du bon type et la transmettre. Vous voudrez peut-être l'encapsuler dans votre propre méthode:

 public static DateTime? TryParse(string text)
{
    DateTime date;
    if (DateTime.TryParse(text, out date))
    {
        return date;
    }
    else
    {
        return null;
    }
}
 

... ou si vous aimez l'opérateur conditionnel:

 public static DateTime? TryParse(string text)
{
    DateTime date;
    return DateTime.TryParse(text, out date) ? date : (DateTime?)null;
}
 

140voto

Jason Kealey Points 3860
 DateTime? d=null;
DateTime d2;
bool success = DateTime.TryParse("some date text", out d2);
if (success) d=d2;
 

(Il pourrait y avoir des solutions plus élégantes, mais pourquoi ne pas simplement faire quelque chose comme ci-dessus?)

18voto

Binary Worrier Points 27424

Vous ne pouvez pas parce que Nullable<DateTime> est un type différent de DateTime . Vous devez écrire votre propre fonction pour le faire,

 public bool TryParse(string text, out Nullable<DateTime> nDate)
{
    DateTime date;
    bool isParsed = DateTime.TryParse(text, out date);
    if (isParsed)
        nDate = new Nullable<DateTime>(date);
    else
        nDate = new Nullable<DateTime>();
    return isParsed;
}
 

J'espère que cela t'aides :)

EDIT: Suppression de la méthode d'extension (évidemment) incorrectement testée, car (comme indiqué par certains mauvais moyens) les méthodes d'extension qui tentent de modifier le paramètre "this" ne fonctionneront pas avec les types de valeur.

PS The Bad Hoor en question est un vieil ami :)

4voto

user2687864 Points 21

Qu'en est-il de créer une méthode d'extension?

 public static class NullableExtensions
{
    public static bool TryParse(this DateTime? dateTime, string dateString, out DateTime? result)
    {
        DateTime tempDate;
        if(! DateTime.TryParse(dateString,out tempDate))
        {
            result = null;
            return false;
        }

        result = tempDate;
        return true;

    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X