执行不区分区域性的大小写更改
String.ToUpper、String.ToLower、Char.ToUpper 和 Char.ToLower 方法提供不接受任何参数的重载。 默认情况下,这些不带参数的重载根据 CultureInfo.CurrentCulture 的值执行大小写更改。 这样生成的结果(区分大小写)可能会因区域性而异。 为了明确希望大小写更改是区域性敏感型,还是非区域性敏感型,应使用这些要求显式指定 culture
参数的方法重载。 对于区域性敏感型大小写更改,请为 culture
参数指定 CultureInfo.CurrentCulture
。 对于非区域性敏感型大小写更改,请为 culture
参数指定 CultureInfo.InvariantCulture
。
通常情况下,字符串会转换为标准大小写,以方便稍后查找。 如果按这种方式使用字符串,应为 culture
参数指定 CultureInfo.InvariantCulture
,因为 Thread.CurrentCulture 的值可能会在大小写更改和执行查找时之间变化。
如果安全决策以大小写更改操作为依据,操作应为非区域性敏感型,以确保结果不受 CultureInfo.CurrentCulture
值的影响。 有关展示了区域性敏感型字符串操作如何产生不一致结果的示例,请参阅字符串使用最佳做法的“使用当前区域性的字符串比较”部分。
String.ToUpper 和 String.ToLower
为了代码清楚起见,建议始终使用 String.ToUpper
和 String.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()];
}
如果希望 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.ToUpper
和 String.ToLower
方法相同,但受影响的区域性只有土尔其语(土尔其)和阿塞拜疆语(拉丁,阿塞拜疆)。 这些是唯一两个存在单字符大小写差异的区域性。 有关此唯一大小写映射的详细信息,请参阅 String 类文件中的“大小写”部分。 为了代码清楚起见,并确保结果一致,建议始终使用接受 CultureInfo 参数的这些方法重载。