Int32.ToString () 문화권에 따라 다르나요?
ReSharper 베타 버전을 실행 중이며 다음 코드에 대한 경고가 표시됩니다.
int id;
// ...
DoSomethingWith(id.ToString());
경고가 id.ToString()
호출 중이며 "명시 적으로 문자열 변환에서 문화를 지정하십시오" 라는 메시지가 표시됩니다 . 나는 경고를 이해하고 그것을 고치는 방법을 알고 있습니다. 코드를 훨씬 다루기 힘든 것으로 변경하십시오 id.ToString(CultureInfo.InvariantCulture)
.
하지만 제 질문은 이것이 필요한가요? 내 말은, DateTime
(다른 문화는 다른 날짜 형식을 가짐) 및 Double
(소수점에 사용되는 다른 문자 )와 같은 유형을 사용할 때 문화를 지정하는 것이 중요합니다 . 그러나 Int32.ToString()
적어도 en-US 및 고정 문화권에서는 서식을 전혀 추가하지 않습니다. 쉼표, 소수점, 달러 기호, 아무것도 없습니다. 그렇다면 문화마다 무엇이 다를까요?
매개 변수 없음을 호출 할 때 실제로 일종의 서식을 추가 하는 문화가 Int32.ToString()
있습니까? 아니면 ReSharper 베타의 버그이며이 경고가 실제로 적용되지 Int32
않습니까 (이 경우 ReSharper 버그 보고서를 제출합니다)?
운영 체제는 숫자 의 음수 부호 를 변경할 수 있습니다.
Control panel ->
Language and regional settings ->
Additional settings ->
Negative sign
따라서 현재 문화는 음수 기호를 무시할 수 있습니다. 이 경우 지역 설정을 존중해야합니다. 이것이 경고의 이유입니다. 프로그래밍 방식으로 음수 부호를 변경할 수도 있습니다.
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
// Make a writable clone
culture = (CultureInfo) culture.Clone();
culture.NumberFormat.NegativeSign = "!";
임의의 int 샘플에서 테스트 한대로 Windows ( CultureTypes.InstalledWin32Cultures
) 와 함께 설치된 352 개의 문화권 모두 동일한 결과를 제공합니다.
Daniel은 사용자 지정 문화가 음수에 다른 접두사를 사용할 수 있다는 점을 지적하는 것이 옳지 만 실수로 저장하여이 기능을 사용한 사람은 의심 스럽습니다.
.NET 개발자가 float 및 다른 유형과 일치하도록 한 것 같습니다. 그들은 또 무엇을 기대하고 있었습니까?
> int.MaxValue.ToString(CultureInfo.AncientRome)
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM....
예. 그것은 현재의 문화에 달려 있습니다. 로부터 MSDN의 문서 :
반환 값은 일반 숫자 형식 지정자 ( "G")와 현재 문화권에 대한 NumberFormatInfo 개체로 형식이 지정됩니다 .
내 강조
Resharper는 사용하려는 문화에 대해 명시하기를 원할 것입니다. 생략하기 때문에 다른 시스템에서 실행될 때 변경 될 수있는 동작에 의존합니다.
이상합니다. 50.ToString (CultureInfo.CreateSpecificCulture ( "ar-AE"))가 "٥٠"를 반환 할 것으로 예상했지만 그렇지 않습니다.
나는 이것을 방금 보았고 문제는 NumberFormatInfo.DigitSubstitution 이 실제로 구현되지 않은 것 같습니다.
DigitSubstitution 속성은 향후 사용을 위해 예약되어 있습니다. 현재는 현재 NumberFormatInfo 개체에 대한 구문 분석 또는 서식 지정 작업에 사용되지 않습니다.
따라서 열거 형 System.Globalization.DigitShapes가 있지만 실제로는 IFormatProvider의 NumberFormatInfo 비트에서 구현되지 않습니다.
아니오라고 말했지만 MSDN Int32.ToString () 확인하면 다음과 같습니다.
반환 값은 일반 숫자 형식 지정자 ( "G")와 현재 문화권에 대한 NumberFormatInfo 개체로 형식이 지정됩니다.
그래서 놀라운 것이 있습니다.
질문은 왜 현재의 Resharper가 이것을 제안하지 않는 것입니까?
정수는 2,147,483,647만큼 높을 수 있기 때문입니다.
일부 국가 에서는 쉼표 대신 소수 또는 공백을 사용합니다.
참고 URL : https://stackoverflow.com/questions/8492449/is-int32-tostring-culture-specific
'developer tip' 카테고리의 다른 글
HTML의 뷰포트 란 무엇입니까? (0) | 2020.11.21 |
---|---|
메모리 오류 및 목록 제한? (0) | 2020.11.21 |
data.frame 열 값을 합산하는 방법은 무엇입니까? (0) | 2020.11.21 |
사악한 정규식을 어떻게 인식 할 수 있습니까? (0) | 2020.11.21 |
Visual Studio 2012 64 비트? (0) | 2020.11.21 |