J'ai besoin d'effectuer une vérification basée sur une valeur de chaîne, que ce soit une date ou une décimale, mais l'analyse de date renvoie toujours vrai pour la décimale.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Il renvoie une date valide 3/5/2019
.
Comment valider une chaîne pour connaître sa date valide lorsque le format de date n'est pas connu?
DateTime.ParseExact
si vous savez quels formats il peut / devrait prendreTryParseExact
et spécifier des formats de date valides.DateTime.Parse
essaie plusieurs modèles. Si vous ne souhaitez en reconnaître que certains, essayez de les analyser spécifiquement.Réponses:
Le problème est que cela
"3.5"
est considéré comme une date valide (et aussi une décimale).Si vous voulez que le type décimal gagne toujours (c'est-à-dire que vous ne voulez pas
isDate
et queisDecimal
les deux le soienttrue
), incluez une vérification décimale dans votre validation.Une façon de le faire consiste à utiliser les
TryParse
méthodes (qui renvoient unbool
si une chaîne peut être analysée dans le type, et qui définit unout
paramètre sur la valeur convertie) pour déterminer si la chaîne peut être convertie en un type, par exemple:la source
isDate
c'estfalse
parce qu'il comprend une vérificationisDecimal
. N'est-ce pas ce que vous demandiez?Consultez la documentation officielle sur ParseExact
Si vous connaissez la représentation exacte, vous pouvez faire quelque chose comme ceci:
Si vous ne le savez pas, alors vous êtes coincé avec les convictions culturelles
la source