문화권에 구애받지 않고 대소문자 변환을 수행

String.ToUpper, String.ToLower, Char.ToUpperChar.ToLower 메서드에는 어떤 매개변수도 허용하지 않는 오버로드가 있습니다. 기본적으로 매개 변수가 없는 이러한 오버로드는 값 CultureInfo.CurrentCulture에 따라 대/소문자를 변경합니다. 그 결과는 문화권에 따라 달라질 수 있는 대소문자 구분을 생성합니다. 대/소문자 변경을 문화에 민감하게 할지, 아니면 민감하지 않게 할지를 명확하게 하려면, 매개 변수를 명시적으로 지정해야 하는 이러한 메서드의 오버로드를 culture 사용해야 합니다. 문화권에 민감한 대/소문자 변경의 경우, culture 매개변수로 CultureInfo.CurrentCulture를 지정하십시오. 문화에 구애받지 않는 대/소문자 변경의 경우 culture 매개 변수에 CultureInfo.InvariantCulture을 지정하십시오.

나중에 더 쉽게 조회할 수 있도록 문자열이 표준 사례로 변환되는 경우가 많습니다. 이러한 방식으로 문자열을 사용하는 경우, culture 매개 변수에 대해 CultureInfo.InvariantCulture를 지정해야 합니다. 이는 대/소문자 변경 시간과 조회가 발생하는 시간 사이에 Thread.CurrentCulture의 값이 잠재적으로 변경될 수 있기 때문입니다.

보안 결정이 대소문자 변경 작업을 기반으로 하는 경우, 해당 작업은 문화에 의존하지 않아 결과가 CultureInfo.CurrentCulture 값에 의해 영향을 받지 않도록 해야 합니다. 문자열 사용 모범 사례 문서의 "현재 문화권을 사용하는 문자열 비교" 섹션을 참조하여, 문화에 민감한 문자열 작업이 어떻게 일관되지 않은 결과를 초래할 수 있는지 알아보세요.

String.ToUpper 및 String.ToLower

코드의 명확성을 위해서는, 항상 String.ToUpperString.ToLower 메서드의 오버로드를 사용하여 문화권을 명시적으로 지정하는 것이 좋습니다. 예를 들어 다음 코드는 식별자 조회를 수행합니다. 이 key.ToLower 작업은 기본적으로 문화에 민감하게 반응하지만, 이로 인해 코드에서 이 동작이 명확하지 않습니다.

예시

Shared Function LookupKey(key As String) As Object
   Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower()];
}

작업을 문화에 구애받지 않게 하려면 다음과 같이 앞의 예제를 변경하여 대/소문자를 변경할 때 명시적으로 CultureInfo.InvariantCulture을(를) 사용하십시오.

Shared Function LookupKey(key As String) As Object
    Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}

Char.ToUpper 및 Char.ToLower

Char.ToUpper 메서드와 Char.ToLower 메서드의 특성 String.ToUpperString.ToLower 이 동일하지만 영향을 받는 문화권은 터키어(튀르키예)와 아제르바이잔어(라틴어, 아제르바이잔)뿐입니다. 단일 문자 대/소문자 구분 차이가 있는 유일한 두 문화권입니다. 이 고유한 대소문자 매핑에 대한 자세한 내용은 String 클래스 문서의 "대소문자" 섹션을 참조하세요. 코드 명확성을 위해 일관된 결과를 보장하려면 항상 매개 변수를 허용하는 이러한 메서드의 오버로드를 CultureInfo 사용하는 것이 좋습니다.

참고하십시오