Saltar al contenido

TryParse equivalente de Convert con invariantculture

Por fin luego de mucho luchar hemos hallado el arreglo de este dilema que tantos usuarios de nuestro sitio presentan. Si tienes algún dato que compartir puedes dejar tu comentario.

Solución:

Puedes leer sobre NumberStyles en la documentación. Esencialmente, le permite especificar qué tipo de texto se analizará.

Si quieres ser lo más flexible posible, entonces NumberStyles.Any es la opción ‘más ancha’.

Convert.ToInt32 es equivalente a usar int.Parse y Convert.ToDecimal es equivalente a usar decimal.Parse – delegan a estos métodos.

Según la documentación para int.Parseel valor predeterminado es NumberStyles.Integer. Y según la documentación para decimal.Parseel valor predeterminado es NumberStyles.Number. Si quieres ser coherente con el comportamiento de Convert.ToInt32 y Convert.ToDecimaldebe utilizar estos valores.

La documentación para Int64.TryParse dice NumberStyles.Integer es el predeterminado:

El parámetro s se interpreta utilizando el estilo NumberStyles.Integer. Además de los dígitos decimales, solo se permiten espacios iniciales y finales junto con un signo inicial.

Para Decimal.TryParse, es NumberStyles.Number:

El parámetro s se interpreta utilizando el estilo NumberStyles.Number. Esto significa que se permiten los espacios en blanco y los separadores de miles, pero no los símbolos de moneda.

Sí, su enfoque es correcto, ambos enfoques deberían dar los mismos resultados.

La implementación de Convert.ToInt32(string s) es como sigue:

public static int ToInt32(String value, IFormatProvider provider)

    if (value == null)
        return 0;
    return Int32.Parse(value, NumberStyles.Integer, provider);
 

Entonces, como puede ver internamente, un método llama al otro: la única diferencia es que con Convert no tiene control sobre el estilo del número; está codificado para NumberStyles.Integer. Si desea una funcionalidad idéntica, debe especificar este valor de enumeración en sus llamadas a TryParse.

Código fuente para el Convert la clase está disponible aquí.

También puedo señalar que usted está llamando Int64.TryParse cuando si Convert.ToInt32 era suficiente entonces por lo que debería ser Int32.TryParse.

Calificaciones y reseñas

Tienes la posibilidad comunicar esta división si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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