Biri dışında bilinen tüm bilgisayarlarda iyi çalışan bir yazılım geliştiriyoruz. Sorun, "8" ile başlayan dizeleri ayrıştırmaktır. Bir dizenin başında "8" gibi görünüyor ayrılmış bir karakter.int. "8" hatası başarısız. int.Parse her zaman CultureInfo.InvariantCulture gerektirir?
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
sorun int.Parse ("8", CultureInfo.InvariantCulture) kullanılarak çözülmüştür. Bununla birlikte, sorunun kaynağını bilmek güzel olurdu.
Soru: Değişmez kültür belirtmezsek neden "8" in bu davranışını alırız?
ek bilgiler:
Yukarıda sonucu elde müvekkilime küçük programı göndermek mi: Ben tökezledi
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;
}
Güncelleme
Bu bağlantı, microsoft bağlantı veritabanında bir hata: benzer semptomları olan bir sorun, ama gerçek kök neden varmış gibi
görünüyor. Eğer bu konuda ayrıntılı bir açıklama yapabilseydim minnettar olurdum!
Yan not için teşekkürler, ben hallettim :) Kendi yerel ayarları için kayıt defterindeki değerleri daha önce kontrol ettim ve sadece 8 tane hata çoğaltmak yardımcı olan CurrencyNegativePattern var benim makinemde. Doğru yoldan çıktın burada, João. Ancak, bu sorun çok zor ve Microsoft'un da sorunun nedenini bildiğinden emin değilim. Kesinlikle büyük bir UP alıyorsun, ama davranış hala bir gizem. Bu yüzden çabalarınız için minnettar olmama rağmen bir çözüm olarak yanıtı kabul etmiyorum! –
Bu cevabın başlangıcı benim için yanlış görünüyor. "NumberFormatInfo.CurrencyNegativePattern" ve "NumberFormatInfo.CurrencyPositivePattern" değerlerinde bulunan değerler, yalnızca negatif işaret (-), para birimi işareti ve biçimlendirme/ayrıştırma için kullanılacak sayıların sırasını belirlemek için yalnızca anahtar olarak kullanılır. Örneğin, 'CurrencyNegativePattern' değeri olarak '8', desenin '-n $' olması gerektiği anlamına gelir. –