2014-04-05 18 views
10

Resharper ostrzega mnie, że trzeba określić kulturę ciąg kiedy robi int.ToString()Dlaczego określić kulturę konwersji String

na przykład:

int Value = Id.ToString(); // Where Id is an int 

Czy to tylko resharper jest pedantyczny lub jest powód, muszę podać ustawienie kultury do konwersji int do ciąg?

A jeśli jest ku temu powód - co najlepiej używać, gdy moja witryna jest używana na całym świecie? Czy powinien on odzwierciedlać ustawienia serwera, aby wewnętrzna konwersja została wykonana bezpiecznie?

Odpowiedz

13

Ponieważ na przykład angielskie kultury używają "." jako kropka dziesiętna, gdzie jak kultury francuskie używają "," i odwrotnie, aby oddzielić tysiące. Określenie kultury usuwa tę niejednoznaczność, aby kod był wykonywany identycznie w systemach operacyjnych Windows skonfigurowanych dla różnych języków, szczególnie w przypadku, gdy przeanalizowane wartości są zapisywane w pamięci trwałej.

+1

Ale nie. NET podstawy go z bieżących informacji o wątku kultury? W ten sposób będzie serialiaze poprawnie dla użytkownika, który z niego korzysta? Chodzi mi o to, że użytkownicy chcą widzieć to w swojej kulturze, a nie w jakiejś innej kulturze, której nie zrozumieją, więc dlaczego Resharper miałby to sugerować? –

+1

To prawda, ale ReSharper (i FXCop, na którym jest oparty) wskazują na to "coś, co naprawdę chcesz zrobić". Lepiej być wyraźnym i używać CultureInfo.CurrentCulture, jeśli naprawdę chcesz tego zachowania. W przeciwnym razie użyj CultureInfo.InvariantCulture –

+0

Ah, perfect! Zapomniałem o ułamkach dziesiętnych. W moim przypadku wybieram kolumnę tożsamości SQL, INT, która, jak sądzę, zawsze będzie liczbą całkowitą, i konwertowaniem jej na ciąg znaków dla wartości pola rozwijanego interfejsu użytkownika. Twoja odpowiedź wyjaśnia, gdzie to byłoby przydatne. Zgaduję, że tak długo jak używam "CultureInfo.InvariantCulture", wszystkie będą jednolite? – Craig

4

Powód jest taki, że reprezentacja ciągu liczb różni się w zależności od kraju.

Niektórzy używają "." jako separator tysięcy, niektórzy używają ",", niektórzy po prostu nie używają żadnego symbolu w ogóle.

Przeciążenie ToString bez parametru wykorzystuje aktualną kulturę, więc wyniki będą się różnić w zależności od ustawień komputera.

Powiedział, że moja zasada brzmi:

  • każda reprezentacja wewnętrzny musi być InvariantCulture (nigdy polegać na ustawieniach serwera!)
  • wszystko na prezentacji należy używać użytkownika końcowego locale

Mam nadzieję, że to pomaga

Powiązane problemy