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-US
kulturze 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 ToString
lub String.Format
lub przeanalizowanej z ciągu przy użyciu DateTime.Parse
lub, Decimal.Parse
domyś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.CurrentCulture
ponieważ 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-US
kulturze). 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.CurrentCulture
jest en-US
takie 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.InvariantCulture
jeś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.