Gdy liczby, daty i godziny są formatowane w ciągi lub analizowane z ciągów, do określenia, jak to się robi, używana jest kultura. Na przykład w en-USkulturze dominującej masz następujące reprezentacje ciągów:
- 1000000,00 - milion z dwucyfrowym ułamkiem
- 29.01.2013 - data publikacji
W mojej kulturze ( da-DK) wartości mają następującą reprezentację ciągu:
- 1.000.000,00 - milion z dwucyfrową częścią
- 29-01-2013 - data tego nadania
W systemie operacyjnym Windows użytkownik może nawet dostosować formatowanie liczb i daty / czasu, a także może wybrać inną kulturę niż kultura jego systemu operacyjnego. Użyte formatowanie to wybór użytkownika, jaki powinien być.
Dlatego podczas formatowania wartości, która ma być wyświetlana użytkownikowi, za pomocą na przykład ToStringlub String.Formatlub przeanalizowanej z ciągu przy użyciu DateTime.Parselub, Decimal.Parsedomyślnie jest używana CultureInfo.CurrentCulture. Pozwala to użytkownikowi kontrolować formatowanie.
Jednak wiele formatowania i parsowania ciągów nie jest w rzeczywistości ciągami wymienianymi między aplikacją a użytkownikiem, ale między aplikacją a jakimś formatem danych (np. Plikiem XML lub CSV). W takim przypadku nie chcesz używać, CultureInfo.CurrentCultureponieważ jeśli formatowanie i analizowanie są wykonywane z różnymi kulturami, może się zepsuć. W takim przypadku chcesz użyć CultureInfo.InvariantCulture(który jest oparty na en-USkulturze). Dzięki temu wartości mogą być przesyłane w obie strony bez problemów.
Powodem, dla którego ReSharper ostrzega Cię, jest to, że niektórzy autorzy aplikacji nie są świadomi tego rozróżnienia, które może prowadzić do niezamierzonych wyników, ale nigdy tego nie odkryją, ponieważ ich zachowanie CultureInfo.CurrentCulturejest en-UStakie samo jak CultureInfo.InvariantCulture. Jednak gdy tylko aplikacja zostanie użyta w innej kulturze, w której istnieje możliwość użycia jednej kultury do formatowania, a innej do analizowania, aplikacja może się zepsuć.
Podsumowując:
- Użyj
CultureInfo.CurrentCulture(wartość domyślna), jeśli formatujesz lub analizujesz ciąg użytkownika.
- Użyj,
CultureInfo.InvariantCulturejeśli formatujesz lub analizujesz ciąg, który powinien być analizowany przez oprogramowanie.
- Rzadko używaj określonej kultury narodowej, ponieważ użytkownik nie może kontrolować sposobu formatowania i analizowania.