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.
Pero que te sale al decompilar el metodo?
Oscar, a qué te refieres exactamente? no entiendo muy bien por dónde va la pregunta.
Creo que es una excelente idea la que tuvo Oscar, puedes decompilar la DLL «System» de el framework 2.0, para ver como esta hecho ese metodo, igual y con el .Net Reflector http://www.red-gate.com/products/reflector/ se puede hacer el truco
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 🙂
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
Lo único Bruno que si es un bug del Framework en la versión 3.5 estaría corregido seguramente..