C# 的 String , ToLower() 與 ToLowerInvariant() 有什麼不同

因在網路上有人問起這個問題,獨自看了一點資料,做了以下整理。

簡單說, ToLower() 是給出對應的小寫文字,這種給出的方式是用你本國文字理解方式。可是,像土耳其文有29個字母, TIN 和 tin 不是對等的大小寫對應。主要是在文字國別的差異,這在說明書上,英文字眼是使用 culture-sensitive 來形容。

而 ToLowerInvariant() ,則是因為程式中一些使用到文字的部分,例如檔名排序,當有不同國別的使用者,各自按照自己的文字理解方式看待同一個程式時,程式不容易搞定所有的使用者,所以, ToLowerInvariant 是用一個內定、通用的,說穿就是霸道的,統一用英文的文字國別定義,來處理轉換小寫文字。用在一些比較敏感的文字處理,包括檔名、命名通道 (named pipe) 、或者註冊 key 的排序呈現,都比較適合。

可以細讀以下參考資料:
[1] 簡要的重點說明 http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
[2] 一個普遍使用的問題,判斷是否包含 http://stackoverflow.com/questions/444798/case-insensitive-containsstring
[3] 特別地說, ToUpperInvariant() 比 ToLowerInvariant() 適用 http://stackoverflow.com/questions/2801508/what-is-wrong-with-tolowerinvariant

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized 並標籤為 。將永久鏈結加入書籤。