Eu preciso executar uma verificação com base em um valor de seqüência de caracteres se é uma data ou decimal, mas a análise de data sempre retorna true para decimal.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Retorna uma data válida 3/5/2019
.
Como validar uma string para saber se é uma data válida quando o formato da data não é conhecido?
DateTime.ParseExact
se você souber quais formatos ele pode / deve ter #TryParseExact
e especificar formatos de data válidos.DateTime.Parse
tenta vários padrões. Se você deseja reconhecer apenas alguns específicos, tente analisá-los especificamente.Respostas:
O problema é que
"3.5"
é considerada uma data válida (e também um decimal).Se você deseja que o tipo decimal sempre "vença" (ou seja, você não deseja
isDate
eisDecimal
que ambos sejamtrue
), inclua uma verificação decimal em sua validação.Uma maneira de fazer isso é usar os
TryParse
métodos (que retornam abool
se uma string pode ser analisada para o tipo e que define umout
parâmetro para o valor convertido) para determinar se a string pode ser convertida em um tipo, por exemplo:fonte
isDate
éfalse
porque inclui uma verificaçãoisDecimal
. Não era isso que você estava pedindo?Verifique a documentação oficial no ParseExact
Se você conhece a representação exata, pode fazer algo assim:
Se você não o conhece, está preso às convenções culturais
fonte