Chúng tôi phát triển một phần mềm được thiết lập hoạt động tốt trên tất cả các máy tính đã biết ngoại trừ một máy tính. Vấn đề là phân tích chuỗi bắt đầu bằng "8". Có vẻ như "8" ở đầu chuỗi là ký tự dành riêng.int.Parse của "8" không thành công. int.Parse luôn yêu cầu 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
Vấn đề được giải quyết bằng int.Parse ("8", CultureInfo.InvariantCulture). Tuy nhiên, nó sẽ được tốt đẹp để biết nguồn gốc của vấn đề.
Câu hỏi: Tại sao chúng ta có hành vi này "8" nếu chúng ta không chỉ định văn hóa bất biến?
thông tin bổ sung:
tôi đã gửi một chương trình nhỏ để khách hàng của tôi đạt được kết quả trên:
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;
}
Cập nhật
tôi stumbled trên liên kết này, một lỗi trong cơ sở dữ liệu kết nối microsoft:
Nó có vẻ như có một vấn đề với các triệu chứng tương tự, nhưng không có nguyên nhân gốc rễ thật sự. Nếu bất cứ ai có thể giải thích về điều này tôi sẽ biết ơn!
Cảm ơn ghi chú bên, tôi đã quan tâm đến nó :) Tôi đã kiểm tra trước đó các giá trị trong sổ đăng ký cho cài đặt ngôn ngữ của mình và chỉ 8 ra có CurrencyNegativePattern không giúp tôi tạo lại lỗi trên máy tính của tôi. Bạn chắc chắn đã đi đúng hướng ở đây João. Tuy nhiên, vấn đề này là một vấn đề khó khăn và tôi không chắc Microsoft cũng biết lý do của vấn đề này. Bạn đang nhận được một UP lớn chắc chắn, nhưng hành vi vẫn còn là một bí ẩn. Đó là lý do tại sao tôi không chấp nhận bạn trả lời như một giải pháp mặc dù tôi rất biết ơn nỗ lực của bạn! –
Sự bắt đầu của câu trả lời này có vẻ sai với tôi. Các giá trị trong 'NumberFormatInfo.CurrencyNegativePattern' và' NumberFormatInfo.CurrencyPositivePattern' chỉ được sử dụng làm khóa - để xác định thứ tự dấu âm (-), ký hiệu tiền tệ và chính số sẽ được sử dụng để định dạng/phân tích cú pháp. Ví dụ: '8' làm giá trị của 'CurrencyNegativePattern' có nghĩa là mẫu phải là '-n $'. –