Khi số, ngày và thời gian được định dạng thành chuỗi hoặc được phân tích cú pháp từ chuỗi, văn hóa được sử dụng để xác định cách thực hiện. Ví dụ, trong en-US
văn hóa thống trị, bạn có các biểu diễn chuỗi này:
- 1.000.000,00 - một triệu với phân số hai chữ số
- 1/29/2013 - ngày đăng bài này
Trong văn hóa của tôi ( da-DK
) các giá trị có biểu diễn chuỗi này:
- 1.000.000,00 - một triệu với phân số có hai chữ số
- 29-01-2013 - ngày đăng bài này
Trong hệ điều hành Windows, người dùng thậm chí có thể tùy chỉnh cách định dạng số và ngày / lần và cũng có thể chọn văn hóa khác ngoài văn hóa của hệ điều hành. Các định dạng được sử dụng là sự lựa chọn của người dùng đó là cách nó nên được.
Vì vậy, khi bạn định dạng một giá trị được hiển thị cho người dùng sử dụng ví dụ ToString
hay String.Format
hay phân tích cú pháp từ một chuỗi sử dụng DateTime.Parse
hoặc Decimal.Parse
mặc định là sử dụng CultureInfo.CurrentCulture
. Điều này cho phép người dùng kiểm soát định dạng.
Tuy nhiên, rất nhiều định dạng và phân tích chuỗi thực sự không phải là các chuỗi trao đổi giữa ứng dụng và người dùng mà là giữa ứng dụng và một số định dạng dữ liệu (ví dụ: tệp XML hoặc CSV). Trong trường hợp đó, bạn không muốn sử dụng CultureInfo.CurrentCulture
vì nếu định dạng và phân tích cú pháp được thực hiện với các nền văn hóa khác nhau thì nó có thể bị hỏng. Trong trường hợp đó bạn muốn sử dụng CultureInfo.InvariantCulture
(dựa trên en-US
văn hóa). Điều này đảm bảo rằng các giá trị có thể làm tròn mà không gặp vấn đề gì.
Lý do mà ReSharper mang đến cho bạn những cảnh báo là một số nhà văn ứng dụng không nhận thức được sự khác biệt này có thể dẫn đến kết quả ngoài ý muốn nhưng họ không bao giờ khám phá ra điều này bởi vì họ CultureInfo.CurrentCulture
là en-US
trong đó có các hành vi tương tự như CultureInfo.InvariantCulture
. Tuy nhiên, ngay khi ứng dụng được sử dụng trong một nền văn hóa khác, nơi có cơ hội sử dụng một nền văn hóa để định dạng và một nền văn hóa khác để phân tích ứng dụng có thể bị hỏng.
Vì vậy, để tổng hợp nó:
- Sử dụng
CultureInfo.CurrentCulture
(mặc định) nếu bạn định dạng hoặc phân tích chuỗi người dùng.
- Sử dụng
CultureInfo.InvariantCulture
nếu bạn đang định dạng hoặc phân tích một chuỗi cần được phân tích cú pháp bởi một phần mềm.
- Hiếm khi sử dụng một nền văn hóa quốc gia cụ thể vì người dùng không thể kiểm soát cách định dạng và phân tích cú pháp được thực hiện.