执行不区分区域性的大小写更改

更新:2007 年 11 月

String.ToUpperString.ToLowerChar.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 方法的重载,这些重载允许您显式指定 culture 参数。例如,下面的代码执行了标识符查找操作。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 方法具有相同的特性,但受影响的区域性只有“tr-TR”(土尔其的土尔其语)和“az-Latn-AZ”(阿塞拜疆的阿泽里语,拉丁)。这是仅有的两个具有单个字符大小写区别的区域性。有关这个唯一大小写映射的详细信息,请参见“自定义大小写映射和排序规则”。为使代码清晰并确保结果一致,建议始终使用这些方法的重载,以便显式指定 culture 参数。

请参见

参考

String.ToUpper

String.ToLower

Char.ToUpper

Char.ToLower

其他资源

执行不区分区域性的字符串操作