2009-01-24 12 views

Odpowiedz

28

Ogólnie rzecz biorąc, będziesz chciał użyć InvariantCulture, jeśli ciąg, który generujesz, będzie trwał w sposób niezależny od kultury bieżącego użytkownika (np. W rejestrze lub w pliku).

Będziesz chciał użyć CurrentCulture dla ciągów, które mają być prezentowane w interfejsie dla bieżącego użytkownika (formularze, raporty).

Subtelne błędy mogą powstać, jeśli używasz CurrentCulture, w którym powinieneś używać InvariantCulture: błędy, które pojawiają się tylko wtedy, gdy masz wielu użytkowników z różnymi kulturami uzyskującymi dostęp do tego samego wpisu rejestru lub pliku, lub jeśli użytkownik zmienia swoją domyślną kulturę.

Jawnie określając CurrentCulture (wartość domyślna, jeśli argument IFormatProvider jest pominięty), jest to zasadniczo dokumentacja, która pokazuje, że wzięto pod uwagę powyższe i że generowany ciąg powinien wykorzystywać kulturę bieżącego użytkownika. Dlatego FxCop zaleca, aby podać argument IFormatProvider.

4

Jest to szczególnie przydatne, jeśli zależy Ci na lokalizacji (globalizacja) w aplikacji. Oznacza to, że jeśli chcesz, aby aplikacja obsługiwała wiele języków i formaty związane z kulturą, powinieneś jej użyć.

5

Nie, nie trzeba określać kultury, chyba że twój ciąg zawiera elementy specyficzne dla kultury, takie jak separatory dziesiętne, waluty itp., Które muszą być renderowane w zależności od kultury.

19

Jeśli nie zostanie podana wartość IFormatProvider (lub równoważnie przekazana null), większość typów argumentów zostanie ostatecznie sformatowana zgodnie z CultureInfo.CurrentCulture. Tam, gdzie jest to interesujące, możesz określić niestandardowy IFormatProvider, który może uzyskać pierwsze pęknięcie podczas formatowania argumentów lub nadpisać formatowanie w zależności od innego kontekstu.

Należy pamiętać, że CultureInfo.CurrentCulture wpływa na formatowanie argumentów, a nie na wybór zasobów; wybór zasobów jest kontrolowany przez CultureInfo.CurrentUICulture.

+2

Jak zdefiniować niestandardowy IFormatProvider - http://www.csharp-examples.net/custom-iformatprovider/ –

+2

Co jeśli obiekt jest ciągiem znaków, czy istnieje jakakolwiek inna kultura? (W przeciwieństwie do formatowania czegoś takiego jak DateTime) –

Powiązane problemy