語言
這些 String.ToUpper、String.ToLower、Char.ToUpper 和 Char.ToLower 方法提供不接受任何參數的多載。 預設情況下,這些無參數的超載會根據 的 CultureInfo.CurrentCulture值進行案例變更。 這會產生在大小寫敏感性方面的結果,而且可能因語言文化不同而有所變化。 為了清楚判斷你想讓案例變更是文化敏感還是不敏感,你應該利用這些方法的超載功能,因為你必須明確指定參數 culture 。 對於文化敏感的案例變化,請指定CultureInfo.CurrentCulture作為culture參數。 對於不區分文化差異的大小寫變更,請為culture參數指定CultureInfo.InvariantCulture。
字串通常會被轉換成標準大小寫,以便日後更容易查找。 當字串以這種方式使用時,你應該為 culture 參數指定 CultureInfo.InvariantCulture,因為 Thread.CurrentCulture 的值可能會在案例變更與查找之間發生改變。
若安全決策基於案例變更操作,該操作應不依賴文化,以確保結果不受 的 CultureInfo.CurrentCulture值影響。 請參閱《使用字 串最佳實務 》文章中「使用當前文化的字串比較」章節,該章節展示了文化敏感字串操作如何產生不一致的結果。
字串轉換為大寫與字串轉換為小寫
為了程式碼的清晰度,建議你總是使用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 方法具有相同特徵,但受影響的只有土耳其(Türkiye)和亞塞拜然(拉丁語,亞塞拜然)。 這是唯一有單一字元大小寫差異的兩個文化。 欲了解更多關於此獨特案例映射的細節,請參閱類別文件中的 String 「Casing」章節。 為了程式碼清晰度並確保結果一致,建議你始終使用這些接受 CultureInfo 參數的方法的超載。