https://www.cnblogs.com/zhw511006/archive/2010/07/09/1774591.html
public enum StringComparison {
CurrentCulture,
CurrentCultureIgnoreCase,
InvariantCulture,
InvariantCultureIgnoreCase,
Ordinal,
OrdinalIgnoreCase
}
CurrentCulture 使用區域敏感排序規則和當前區域比較字符串。
CurrentCultureIgnoreCase 使用區域敏感排序規則、當前區域來比較字符串,同時忽略被比較字符串的大小寫。
InvariantCulture 使用區域敏感排序規則和固定區域比較字符串。
InvariantCultureIgnoreCase 使用區域敏感排序規則、固定區域來比較字符串,同時忽略被比較字符串的大小寫。
Ordinal 使用序號排序規則比較字符串。
OrdinalIgnoreCase 使用序號排序規則並忽略被比較字符串的大小寫,對字符串進行比較。
1.首先是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.
2.StringComparison.CurrentCulture
是在當前的區域信息下進行比較,這是String.Compare在沒有指定StringComparison的時候默認的比較方式.例子如下:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //當前的區域信息是美國
string s1 = "visualstudio";
string s2 = "windows";
Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture)); //輸出"-1"
Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); //當前的區域信息是瑞典
Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture)); //輸出"1"
StringComarison.CurrentCultureIgnoreCase指在當前區域信息下忽略大小寫的比較.
3.StringComarison.InvariantCulture
使用StringComarison.InvariantCulture來進行字符串比較,在任何系統中(不同的culture)比較都將得到相同的結果,他是使用CultureInfo.InvariantCulture的靜態成員CompareInfo來進行比較操作的.例子如下:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //當前的區域信息是美國
string s1 = "visualstudio";
string s2 = "windows";
Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); //輸出"-1"
Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); //當前的區域信息是瑞典
Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); //輸出"-1"