ToLowerInvariant ()의 문제점은 무엇입니까?
다음 코드 줄이 있습니다.
var connectionString = configItems.
Find(item => item.Name.ToLowerInvariant() == "connectionstring");
VS 2010 코드 분석은 다음과 같이 말합니다.
경고 7 CA1308 : Microsoft.Globalization : In 메서드 ... 'string.ToLowerInvariant ()'에 대한 호출을 String.ToUpperInvariant ()로 바꿉니다.
이것이 ToUpperInvariant()
더 신뢰할 수 있음을 의미합니까 ?
Google은 CA1308을 가리키는 힌트를 제공합니다 . 문자열을 대문자로 정규화
그것은 말한다 :
문자열은 대문자로 정규화되어야합니다. 작은 문자 그룹은 소문자로 변환 될 때 왕복 할 수 없습니다. 왕복을 만든다는 것은 문자를 한 로케일에서 문자 데이터를 다르게 나타내는 다른 로케일로 변환 한 다음 변환 된 문자에서 원래 문자를 정확하게 검색하는 것을 의미합니다.
그렇습니다. ToUpper는 ToLower보다 더 신뢰할 수 있습니다.
앞으로 나는 인터넷 검색을 먼저 제안합니다-나는 던져진 모든 FxCop 경고에 대해 그렇게합니다.) 해당 문서를 읽는 데 많은 도움이됩니다.)
TomTom이 말하는 것 외에도 .net은 대문자로 된 문자열 비교에 최적화되어 있습니다. 따라서 상한 불변을 사용하는 것이 이론적으로 하한 불변보다 빠릅니다.
이것은 주석에서 지적한 것처럼 실제로 C #을 통해 CLR에 명시되어 있습니다. 다음 링크는 책의 해당 부분을 인용합니다. 이 주제에 대해 MSDN에서 찾을 수있는 내용이 없기 때문에 이것이 사실인지 확실하지 않습니다. msdn의 문자열 비교 가이드에서는 toupperinvariant와 tolowerinvariant가 동일하며 전자를 선호하지 않는다고 언급합니다.
참조 URL : https://stackoverflow.com/questions/2801508/what-is-wrong-with-tolowerinvariant
'IT Share you' 카테고리의 다른 글
SQLite 쿼리에서 LIMIT 문 사용 (0) | 2020.12.15 |
---|---|
Django에서 브라우저 유형을 감지하는 방법은 무엇입니까? (0) | 2020.12.15 |
내 Powershell 스크립트 매개 변수에 대한 도움말 메시지가 표시되도록하려면 어떻게합니까? (0) | 2020.12.15 |
pg_restore가 성공적으로 반환되지만 실제로 데이터베이스를 복원하지 않는 이유는 무엇입니까? (0) | 2020.12.15 |
C ++에서 Pointer-to-Member-> * 및. * 연산자는 무엇입니까? (0) | 2020.12.15 |