故事先來一下:
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
官方建議,大概總結一下
- 沒有文化特性(只有英文、符號)的比較可以用Ordinal,OrdinalIgnoreCase(效能也比較好)
- 有文化特性的(多語系)請用CurrentCulture
- 沒事不要用InvariantCulture
- 用string.Equals 最好指定 StringComparison,給明確的規則
- string.Compare,string.CompareTo不要拿來檢查是否相等(官方寫的沒給理由,有空或有心人再找)
沒有留言:
張貼留言