itsource

일반적으로 String Comparison을 사용하는 것이 가장 좋습니다.Ordinal Ignore Case 또는 String Comparison.Universent Culture Ignore Case?

mycopycode 2023. 4. 7. 21:15
반응형

일반적으로 String Comparison을 사용하는 것이 가장 좋습니다.Ordinal Ignore Case 또는 String Comparison.Universent Culture Ignore Case?

다음과 같은 코드가 있습니다.

If key.Equals("search", StringComparison.OrdinalIgnoreCase) Then
    DoSomething()
End If

아, 아, 네.OrdinalIgnoreCase,InvariantCultureIgnoreCase , 「」CurrentCultureIgnoreCase

새로운 .Net Docs에는 현재 상황에 가장 적합한 것을 결정하는 데 도움이 되는 표가 있습니다.

MSDN의 "Microsoft에서 문자열을 사용하기 위한 새로운 권장 사항"을 참조하십시오.NET 2.0 인치

이전 소유자: " " " " " " " 를 사용한 InvariantCulture 및 는 새로운 의 "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예" "예의 사용을 합니다.String과부하입니다.NET 2.0. 특히 문화에 구애받지 않고 언어적으로 무관하도록 설계된 데이터는 다음 중 하나를 사용하여 과부하를 지정해야 합니다.StringComparison.Ordinal ★★★★★★★★★★★★★★★★★」StringComparison.OrdinalIgnoreCase 「」StringComparison these. 들들,음, 음음음음음 to to to to to to to to to to to to to to to to와 같이 바이트 단위로 합니다.strcmp이는 기본적으로 기호 문자열의 언어적 해석에서 오류를 방지할 뿐만 아니라 더 나은 성능을 제공합니다.

그때 그때 달라.

Unicode 문자열을 비교하는 것은 어렵습니다.

텍스트 처리 소프트웨어에서의 Unicode 문자열 검색 및 비교 실장은 동등한 코드 포인트의 존재를 고려해야 합니다.이 기능이 없을 경우 특정 코드 포인트시퀀스를 찾는 사용자는 시각적으로 구별할 수 없는 다른 글리프를 찾을 수 없습니다.이 글리프는 다른 코드 포인트 표현이지만 규범적으로는 동일합니다.

참조: http://en.wikipedia.org/wiki/Unicode_equivalence


대소문자를 구분하지 않는 방법으로 2개의 Unicode 문자열을 비교하고 EveryWHERE로 동작시키려면 불가능한 문제가 발생합니다.

전형적인 예로는 터키어 i가 있습니다.대소문자일 경우 I'가 됩니다(점 주의).

디폴트로는 입니다.Net 프레임워크는 일반적으로 문자열 관련 함수에 CurrentCulture를 사용합니다.단, 매우 중요한 예외는 다음과 같습니다..Equals서수(바이트 단위) 비교를 사용합니다.

이는 설계상 컴퓨터의 문화에 따라 다르게 동작하는 다양한 문자열 함수로 이어집니다.


그럼에도 불구하고 우리는 때때로 대소문자를 구분하지 않는 "일반적인 목적"을 원한다.

예를 들어 응용 프로그램이 설치된 시스템에 관계없이 문자열 비교가 동일한 방식으로 수행되도록 할 수 있습니다.

그러기 위해서는, 다음의 3개의 옵션이 있습니다.

  1. 문화를 명시적으로 설정하고 Unicode 동등성 규칙을 사용하여 대소문자를 구분하지 않는 비교를 수행합니다.
  2. 문화를 불변 문화로 설정하고 Unicode 동등성 규칙을 사용하여 대소문자를 구분하지 않는 비교를 수행합니다.
  3. OrdinalIgnoreCase를 사용하여 UniversentCulture를 사용하여 문자열을 대문자로 만든 후 바이트 단위로 비교를 수행합니다.

1)이나2)의은 유니코드보다 비용이 .OrdinalIgnoreCaseOrdinalIgnoreCase는 특별한 Unicode 정규화를 수행하지 않습니다.즉, 컴퓨터 화면에서 같은 방법으로 렌더링하는 일부 문자열은 동일하다고 간주되지 않습니다.예를 들어 다음과 같습니다."\u0061\u030a" ★★★★★★★★★★★★★★★★★」"\u00e5"둘 다 o를 렌더링합니다.그러나 순서형 비교에서는 다른 것으로 간주됩니다.

어떤 것을 가장 많이 선택할지는 구축 중인 애플리케이션에 따라 달라집니다.

  • 만약 터키 사용자만 사용하는 LOB 앱을 쓰고 있다면, 반드시 Method 1을 사용할 것입니다.
  • 단순한 "짝퉁" 대소문자를 구분하지 않는 비교가 필요한 경우, 예를 들어 보통 영어인 db의 열 이름을 사용할 수 있습니다.

Microsoft에는 명확한 가이드라인을 포함한 일련의 권장사항이 있습니다.단, 이러한 문제에 대처하기 전에 Unicode 등가의 개념을 이해하는 것이 매우 중요합니다.

또한 Ordinal Ignore Case는 매우 특별한 종류의 야수이며, 사전 편찬 측면에서 혼합된 것과 약간 서수를 고르고 있습니다.이것은 혼란스러울 수 있습니다.

상황에 따라 다르겠죠?서수 비교는 실제로 문자의 숫자 유니코드 값을 조사하는 것이므로 알파벳 순으로 정렬할 때는 이 값을 선택하는 것이 좋습니다.그러나 문자열 비교에서는 서수가 조금 더 빠릅니다.

당신이 무엇을 원하느냐에 따라 다르겠지만, 당신이 코드를 다른 언어로 현지화하고 싶지 않다고 확신하지 않는 한, 저는 불변의 문화를 피하고 싶습니다.대신 Current Culture를 사용합니다.

또한 OrdinalIgnoreCase는 원하는 수치와 그렇지 않은 수치를 존중해야 합니다.

아주 간단한 대답은 터키어를 사용하지 않는 한 불변 문화를 사용할 필요가 없다는 것입니다.

다음 링크를 참조하십시오.

C#에서는 ToUpper()와 ToUpperInvariant()의 차이점은 무엇입니까?

언급URL : https://stackoverflow.com/questions/72696/which-is-generally-best-to-use-stringcomparison-ordinalignorecase-or-stringcom

반응형