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.Parse
el valor predeterminado es NumberStyles.Integer
. Y según la documentación para decimal.Parse
el valor predeterminado es NumberStyles.Number
. Si quieres ser coherente con el comportamiento de Convert.ToInt32
y Convert.ToDecimal
debe 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.