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.ParseExactsi sabe qué formatos puede / debería tomarTryParseExacty especificar formatos de fecha válidos.DateTime.Parseintenta 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
isDateyisDecimalque ambos seantrue), incluya una verificación decimal en su validación.Una forma de hacerlo es usar los
TryParsemétodos (que devuelven unboolsi una cadena se puede analizar al tipo, y que establece unoutparámetro al valor convertido) para determinar si la cadena se puede convertir a un tipo, por ejemplo:fuente
isDateesfalseporque 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