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

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 方法重载,以便显式指定区域性。 例如,下面的代码执行标识符查找。 默认情况下,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 参数的这些方法重载。

请参阅