다음을 통해 공유


문화권을 구분하지 않는 대/소문자 변경 수행

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

흔히 나중에 더 쉽게 조회할 수 있도록 문자열을 표준 케이스(대/소문자)로 변환합니다. 이 방식으로 문자열을 사용하는 경우 대/소문자가 변경된 시간과 조회가 발생하는 시간 사이에 Thread.CurrentCulture의 값이 잠재적으로 변경될 수 있으므로 culture 매개 변수에 대해 CultureInfo.InvariantCulture를 지정해야 합니다.

보안 결정이 대/소문자 변경 작업을 기반으로 하는 경우 해당 작업이 문화권을 구분하지 않아야 CultureInfo.CurrentCulture 값의 영향을 받지 않는 결과를 얻을 수 있습니다. 문화권 구분 문자열 작업으로 인해 어떻게 일관되지 않은 결과가 나타날 수 있는지에 대한 예제를 보려면 문자열 사용에 대한 모범 사례 문서의 “현재 문화권을 사용하는 문자열 비교” 섹션을 참조하세요.

String.ToUpper 및 String.ToLower

코드 명확성을 위해 문화권을 명시적으로 지정할 수 있는 String.ToUpperString.ToLower 메서드의 오버로드를 항상 사용하는 것이 좋습니다. 예를 들어 다음 코드에서는 ID 조회를 수행합니다. 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()];
}

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

참고 항목