轉一篇關於c# string.Compare() 函數中那個comparisonType參數的文章

原文鏈接 http://developer.51cto.com/art/201001/175935.htm


.NET Framework作爲一個開發環境給編程人員帶來了非常大的好處。平時編寫代碼的時候,.NET Framework字符串可能是大家接觸得比較多的,所使用的字符串操作也應該得比較多的.在字符串比較方面,DOTNET2.0新增了一個枚舉StringComparison:

  1. namespace System  
  2. {  
  3. public enum StringComparison {  
  4. CurrentCulture,  
  5. CurrentCultureIgnoreCase,  
  6. InvariantCulture,  
  7. InvariantCultureIgnoreCase,  
  8. Ordinal,  
  9. OrdinalIgnoreCase  
  10. }  

可能大家平時在進行.NET Framework字符串比較的時候根本沒有考慮那麼多,"= =","Eaqual()"用得不亦樂乎,其實這裏面的東西也挺多,性能,區域信息等

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的時候默認的比較方式.例子如下:

  1. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("en-US");   
  2. //當前的區域信息是美國  
  3. string s1 = "visualstudio";  
  4. string s2 = "windows";  
  5. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.CurrentCulture));   
  6. //輸出"-1"  
  7. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("sv-SE");   
  8. //當前的區域信息是瑞典  
  9. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.CurrentCulture));   
  10. //輸出"1"StringComarison.Current
    CultureIgnoreCase指在當前區域信息下
    忽略大小寫的比較. 

3.StringComarison.InvariantCulture 使用StringComarison.InvariantCulture來進行.NET Framework字符串比較,在任何系統中(不同的culture)比較都將得到相同的結果,他是使用CultureInfo.InvariantCulture的靜態成員CompareInfo來進行比較操作的.例子如下:

  1. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("en-US");   
  2. //當前的區域信息是美國  
  3. string s1 = "visualstudio";  
  4. string s2 = "windows";  
  5. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.InvariantCulture));   
  6. //輸出"-1"  
  7. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("sv-SE");   
  8. //當前的區域信息是瑞典  
  9. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.InvariantCulture));   
  10. //輸出"-1" 

.NET Framework字符串的比較相關操作方法就爲大家介紹到這裏。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章