Necesito realizar una verificación basada en un valor de cadena, ya sea una fecha o decimal, pero el análisis de fecha siempre devuelve verdadero para decimal.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Devuelve una fecha válida 3/5/2019
.
¿Cómo validar la cadena para saber que es una fecha válida cuando no se conoce el formato de fecha?
DateTime.ParseExact
si sabe qué formatos puede / debería tomarTryParseExact
y especificar formatos de fecha válidos.DateTime.Parse
intenta múltiples patrones. Si solo desea reconocer los específicos, intente analizarlos específicamente.Respuestas:
El problema es que
"3.5"
se considera una fecha válida (y también un decimal).Si desea que el tipo decimal siempre "gane" (es decir, no quiere
isDate
yisDecimal
que ambos seantrue
), incluya una verificación decimal en su validación.Una forma de hacerlo es usar los
TryParse
métodos (que devuelven unbool
si una cadena se puede analizar al tipo, y que establece unout
parámetro al valor convertido) para determinar si la cadena se puede convertir a un tipo, por ejemplo:fuente
isDate
esfalse
porque incluye un cheque paraisDecimal
. ¿No es eso lo que estabas pidiendo?Consulte la documentación oficial en ParseExact
Si conoce la representación exacta, puede hacer algo como esto:
Si no lo sabes, entonces estás atrapado en las convenciones culturales.
fuente