Je souhaite utiliser la méthode DateTime.TryParse pour obtenir la valeur datetime d'une chaîne dans un Nullable. Mais quand j'essaye ceci:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
le compilateur me dit
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 cela ne fonctionne pas non plus. Des idées?
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:
... ou si vous aimez l'opérateur conditionnel:
Ou en C # 7:
la source
Parse
s'attendraient simplement à ce qu'il revienneDateTime
et lève une exception en cas d'échec, non? Mais oui, vous pouvez faire ce que vous voulez ... et dans Noda Time, j'ai nommé les méthodes appropriées à laParse
place.else
mot-clé est inutile (dans votre premier exemple) car le point final duif
bloc ne peut jamais être atteint.Voici une édition légèrement concise de ce que Jason a suggéré:
la source
Vous ne pouvez pas parce que
Nullable<DateTime>
c'est un type différent deDateTime
. Vous devez écrire votre propre fonction pour le faire,J'espère que cela t'aides :)
EDIT: Suppression de la méthode d'extension (évidemment) mal testée, car (comme souligné par certains mauvais hoor) 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 :)
la source
Qu'en est-il de la création d'une méthode d'extension?
la source
dateTime
, pour? Il n'est jamais utilisé.DateTime? TryParse(this string dateString)
. Cette implémentation est tout simplement bizarre.(DateTime?).TryParse( ... )
ouNullable<DateTime>.TryParse( ... )
. Donc mike z a raison, c'est une signature idiote pour la méthode.Je ne vois pas pourquoi Microsoft n'a pas géré cela. Une petite méthode utilitaire intelligente pour gérer cela (j'ai eu le problème avec int, mais remplacer int par DateTime aura le même effet, pourrait être .....
la source
C'est la seule doublure que vous recherchez pour:
Si vous voulez en faire une méthode de pseudo-extension TryParse appropriée, vous pouvez le faire:
la source
Voici une solution sur une seule ligne:
la source
Sinon, si vous n'êtes pas concerné par la possible exception déclenchée, vous pouvez modifier TryParse pour Parse:
Bien qu'il n'y ait pas non plus de booléen indiquant le succès, cela peut être pratique dans certaines situations où vous savez que le texte d'entrée sera toujours valide.
la source