2020年12月15日

.net 字串比較


故事先來一下:

DB存的是str1,使用者輸入的是str2,程式說這兩個字串不一樣,我一眼就看出 ... 看出這個問題我要找很久 …

其實也還好,馬上想到是字串比對StringComparison的問題

原本用的是OrdinalIgnoreCase,但這串奇怪語言,我猜應該是要包含點什麼文化特性,試的結果如下:

str1 = "HÀ HỮU TUYÊN";
str2 = "HÀ HỮU TUYÊN";

 

 

https://docs.microsoft.com/zh-tw/dotnet/standard/base-types/best-practices-strings

官方建議,大概總結一下
  1. 沒有文化特性(只有英文、符號)的比較可以用Ordinal,OrdinalIgnoreCase(效能也比較好)
  2. 有文化特性的(多語系)請用CurrentCulture
  3. 沒事不要用InvariantCulture
  4. 用string.Equals 最好指定 StringComparison,給明確的規則
  5. string.Compare,string.CompareTo不要拿來檢查是否相等(官方寫的沒給理由,有空或有心人再找)

沒有留言: