本文一些資料參考自https://blog.csdn.net/sinat_27657511/article/details/52275327,感謝這位博主
下面就來談下StringComparison。
public enum StringComparison
{
CurrentCulture,
CurrentCultureIgnoreCase,
InvariantCulture,
InvariantCultureIgnoreCase,
Ordinal,
OrdinalIgnoreCase
}
CurrentCulture 使用區域敏感排序規則和當前區域比較字符串。
CurrentCultureIgnoreCase 使用區域敏感排序規則、當前區域來比較字符串,同時忽略被比較字符串的大小寫。
InvariantCulture 使用區域敏感排序規則和固定區域比較字符串。
InvariantCultureIgnoreCase 使用區域敏感排序規則、固定區域來比較字符串,同時忽略被比較字符串的大小寫。
Ordinal 使用序號排序規則比較字符串。
OrdinalIgnoreCase 使用序號排序規則並忽略被比較字符串的大小寫,對字符串進行比較。
StringComparison.Ordinal
在進行調用String.Compare(string1,string2,StringComparison.Ordinal)的時候是進行非語言(non-linguistic)上的比較,API運行時將會對兩個字符串進行byte級別的比較,因此這種比較是比較嚴格和準確的,並且在性能上也很好,一般通過StringComparison.Ordinal來進行比較比使用String.Compare(string1,string2)來比較要快10倍左右.(可以寫一個簡單的小程序驗證,這個挺讓我驚訝,因爲平時使用String.Compare從來就沒想過那麼多).StringComparison.OrdinalIgnoreCase就是忽略大小寫的比較,同樣是byte級別的比較.性能稍弱於StringComparison.Ordinal.
string類型中的Contains類型默認使用了Ordinal方式,所以速度會很快
其他的方法例如IndexOf,CompareTo等都默認使用了CurrentCulture方式,所以速度會相對比較滿,可以調用的時候顯示聲明StringComparison的方式,速度會快很多,下面是測試:
在約1500個字符中查找一個字符‘q’,位於該序列的結尾處。
使用Ordinal方式的速度:
不使用Ordinal方式:
對比發現速度確實快了很多,在文本約龐大時候,效果會更加的明顯。