¿El método TryParse genera excepciones?

Como todos ya sabréis el método TryParse se utiliza para realizar conversiones de un tipo a otro, por ejemplo, para convertir una fecha representada en una variable string a una variable de tipo DateTime.

Si la conversión se puede realizar, devuelve true como resultado y en el segundo parámetro devuelve la fecha que representa el primer parámetro.

Si la conversión no se puede realizar, devuelve false como resultado y en este caso, por tratarse de un tipo DateTime devuelve MinValue en el segundo parámetro.

public static bool TryParse(
    string s,
    out DateTime result
)

Lo bueno de TryParse frente a otros métodos de conversión es que no genera una excepción si se produce un error en la conversión….o sí que puede generlas????

Pues sí, sí que puede….al menos es capaz de generar esta excepción:

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.

La razón de este error a día de hoy la sigo sin tener muy clara pero lo que sí tengo claro es que está relacionado con la configuración regional.

Y explico por qué no lo tengo muy claro; dos equipos, idéntica configuración regional, mismo sistema operativo, idioma etc……en uno funciona y en otro no. Mil pruebas jugando con la cultura en la conversión y nada…..todo parece correcto pero salta la excepción.

Y la solución pues algo ridícula a priori pero funcionó…..cambiamos el formato de la hora de la configuración regional, cambiamos para que en el hora no se incluyera la marca de AM/PM….y a partir de ese momento el método TryParse empezó a funcionar según las especificaciones.

Y lo más raro aún, volvimos a cambiar la configuración para ponerla en el estado anterior y seguía funcionando…ya no conseguimos volver a generar la excepción…

Este caso es un poco raro pero parece ser que sí que hay un error en el Framework .NET 2.0 con el método TryParse. No he podido comprobar si con el 3.5 ocurre lo mismo pero es más que probable que ya esté solucionado.

Aunque la situación que comento no es la misma, por lo que he podido leer, también existe un bug en el método TryParse de la versión 2.0 cuando en el formato de la fecha de la configuración regional se usan espacios como caracteres de separación pudiendo llegar a generarse esta excepción.

Conclusión, que aunque no está nada claro, si de repente os dais cuenta que el método TryParse os genera una excepción no penséis que os habéis vuelto loco y buscar en la causa en la configuración regional.

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

6 comentarios en “¿El método TryParse genera excepciones?”

  1. Hombre, sí, podría hacerlo pero el tema es que según la documentación no debería generarse esa excepción y a mí nunca me había pasado. La idea de usar TryParse en lugar Parse es para evitar las excepciones.

    Además, después de hacer los cambios que he comentado no ha habido manera de reproducir el tema.

    Ahora ya he entendido a Oscar 🙂

  2. Buenas

    no hace falta «reflectar» sobre las bibliotecas del framework para ver el código de las mismas, recuerden que el codigo fuente del framework está disponible para descargar !!! (http://elbruno.com/blogs/elbruno/archive/2008/01/17/vs2008-finally-liberado-el-codigo-del-net-framework-conociendo-el-interior-del-lado-oscuro.aspx)

    E Ibon, tienes razón, este tipo de cosillas son los que hacen que la informática sea interesante, pero también que sea frustrante, porque si algo no funciona, luego funciona pero no puedes reproducir el error, siempre te queda la duda de porqué falló.

    saludos

Responder a ilanda Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *