Sviluppiamo un software consolidato che funziona bene su tutti i computer noti tranne uno. Il problema è analizzare le stringhe che iniziano con "8". Sembra che "8" all'inizio di una stringa sia un carattere riservato.int.Parse di "8" non riesce. int.Parse richiede sempre 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
Il problema viene risolto utilizzando int.Parse ("8", CultureInfo.InvariantCulture). Tuttavia, sarebbe bello conoscere la fonte del problema.
Domanda: Perché si ottiene questo comportamento di "8" se non si specifica la cultura invariante?
Ulteriori informazioni:
ho fatto inviare un piccolo programma per il mio cliente ottenere il risultato di cui sopra:
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;
}
Aggiornamento
mi sono imbattuto questo link, un bug nel database di connessione di Microsoft:
Sembra che ci sia un problema con i sintomi la classica, ma nessuna vera causa principale. Se qualcuno potesse approfondire questo sarei grato!
Grazie per la nota a margine, mi sono preso cura di esso :) Ho controllato in precedenza i valori nel Registro di sistema per le sue impostazioni internazionali e l'unico 8 fuori c'è il CurrencyNegativePattern che non mi aiuta a riprodurre l'errore sulla mia macchina. Sei decisamente sulla pista giusta qui João. Tuttavia, questo problema è difficile e non sono sicuro che Microsoft conosca il motivo del problema. Sicuramente stai ottenendo un grande successo, ma il comportamento è ancora un mistero. Ecco perché non accetto la tua risposta come soluzione, anche se sono grato per il tuo impegno! –
L'inizio di questa risposta mi sembra sbagliato. I valori in 'NumberFormatInfo.CurrencyNegativePattern' e' NumberFormatInfo.CurrencyPositivePattern' sono utilizzati solo come chiavi - per identificare l'ordine del segno negativo (-), il simbolo di valuta e il numero stesso che verrà utilizzato per la formattazione/analisi. Ad esempio, "8" come valore di "CurrencyNegativePattern" significa che il modello deve essere "-n $". –