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

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 參數。

另請參閱