C# 문자열 비교 : CurrentCultureGinoreCase와 InvariantCultureGnoreCase의 차이
-
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));
}
}
(의심 할 여지없이 다른 많은 경우 - 이것은 내가 생각한 첫 번째 사례였습니다.)