Desarrollamos un software establecido que funciona bien en todas las computadoras conocidas excepto en una. El problema es analizar cadenas que comienzan con "8". Parece que "8" en el comienzo de una cadena es un carácter reservado.int.Parse de "8" falla. int.Parse siempre requiere CultureInfo.InvariantCulture?
Parsing:
int.Parse("8") -> Exception message: Input string was not in a correct format.
int.Parse("80") -> 0
int.Parse("88") -> 8
int.Parse("8100") -> 100
CurrentCulture: sv-SE
CurrentUICulture: en-US
El problema se resuelve utilizando int.Parse ("8", CultureInfo.InvariantCulture). Sin embargo, sería bueno saber el origen del problema.
Pregunta: ¿Por qué tenemos este comportamiento de "8", si no se especifica cultural de todos?
Información adicional:
envié un pequeño programa para mi cliente lograr el resultado anterior:
private int ParseInt(string s)
{
int parsedInt = -1000;
try
{
parsedInt = int.Parse(s);
textBoxMessage.Text = "Success: " + parsedInt;
}
catch (Exception ex)
{
textBoxMessage.Text =
string.Format("Error parsing string: '{0}'", s) + Environment.NewLine +
"Exception message: " + ex.Message;
}
textBoxMessage.Text += Environment.NewLine + Environment.NewLine +
"CurrentCulture: " + Thread.CurrentThread.CurrentCulture.Name + "\r\n" +
"CurrentUICulture: " + Thread.CurrentThread.CurrentUICulture.Name + "\r\n";
return parsedInt;
}
actualización
me encontré con este enlace, un error en la base de datos de conexión de Microsoft:
Parece que hay un problema con síntomas similares, pero ninguna causa raíz real. ¡Si alguien pudiera dar más detalles sobre esto, estaría agradecido!
Gracias por la nota al margen, me ocupé :) He comprobado anteriormente los valores en el registro para su configuración de configuración regional y el único 8 por ahí es el CurrencyNegativePattern que no me ayuda a reproducir el error en mi máquina. Definitivamente está en la dirección correcta aquí João. Sin embargo, este problema es difícil y tampoco estoy seguro de que Microsoft sepa el motivo del problema. Seguramente obtendrá una gran UP, pero el comportamiento sigue siendo un misterio. ¡Es por eso que no acepto que tu respuesta sea una solución, aunque estoy agradecido por tu esfuerzo! –
El comienzo de esta respuesta me parece incorrecto. Los valores en 'NumberFormatInfo.CurrencyNegativePattern' y' NumberFormatInfo.CurrencyPositivePattern' se usan solo como claves: para identificar el orden del signo negativo (-), el signo de moneda y el número mismo que se usará para formatear/analizar. Por ejemplo, '8' como valor de 'CurrencyNegativePattern' significa que el patrón debe ser '-n $'. –