C# 문자열 비교 : CurrentCultureGinoreCase와 InvariantCultureGnoreCase의 차이

StackOverflow https://stackoverflow.com/questions/417954

  •  03-07-2019
  •  | 
  •  

문제

C#에서 문자열 비교를 할 때

string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.CurrentCultureIgnoreCase);

그리고

string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.InvariantCultureIgnoreCase);

... 어쨌든 해당 추가 매개 변수를 포함시키는 것이 중요합니까?

도움이 되었습니까?

해결책

Microsoft는 언제 사용 해야하는지에 대한 훌륭한 지침을 제공합니다. InvariantCulture 재산:

MSDN : CultureInfo.Invariantculture 속성

... 애플리케이션은 파일에 지속되는 형식 및 구문 분석과 같은 문화 독립적 결과가 필요한 프로세스에 대해서만 변하지 않는 문화를 사용해야합니다. 다른 경우에는 언어 적으로 부정확하거나 문화적으로 부적절 할 수있는 결과가 생성됩니다.

보안 고려 사항

문자열 비교 또는 사례 변경 결과에 따라 보안 결정이 내려지는 경우 응용 프로그램은 불변 문화를 사용하는 대신 사례를 무시하는 서수 비교를 사용해야합니다. [...

문자열 작업

애플리케이션이 CurrentCulture의 값에 영향을받지 않는 문화에 민감한 문자열 작업을 수행 해야하는 경우 CultureInfo 매개 변수를 수용하는 방법을 사용해야합니다. [...

지속되는 데이터

불변의 배양 속성은 사용자에게 직접 표시되지 않는 데이터를 저장하는 데 유용합니다. 문화 독립적 형식으로 데이터를 저장하면 변경되지 않는 알려진 형식이 보장됩니다. 다른 배양의 사용자가 데이터에 액세스하면 특정 사용자를 기반으로 적절하게 포맷 할 수 있습니다. [...

다른 팁

다른 게시물은 좋은 조언을했지만, 분명히 차이를 만드는 위치를 보여주는 것이 좋을 것이라고 생각했습니다.

using System;
using System.Globalization;
using System.Threading;

class Test
{
    static void Main()
    {
        CultureInfo turkish = CultureInfo.CreateSpecificCulture("tr");
        Thread.CurrentThread.CurrentCulture = turkish;                

        // In Turkey, "i" does odd things
        string lower = "i";
        string upper = "I";

        Console.WriteLine(lower.Equals(upper, 
            StringComparison.CurrentCultureIgnoreCase));
        Console.WriteLine(lower.Equals(upper, 
            StringComparison.InvariantCultureIgnoreCase));
    }
}

(의심 할 여지없이 다른 많은 경우 - 이것은 내가 생각한 첫 번째 사례였습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top