執行不區分文化特性的大小寫變更

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 Method
String.ToLower Method
Char.ToUpper Method
Char.ToLower Method

其他資源

執行不區分文化特性的字串作業