平時編寫代碼的時候,字符串可能是大家接觸得比較多的,所使用的字符串操作也應該得比較多的.在字符串比較方面,DOTNET2.0新增了一個枚舉StringComparison:
namespace System
{
public enum StringComparison {
CurrentCulture,
CurrentCultureIgnoreCase,
InvariantCulture,
InvariantCultureIgnoreCase,
Ordinal,
OrdinalIgnoreCase
}
}
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"
在.net1.1里面通過String.Compare和CultureInfo同樣可以達到以上效果,但在2.0里通過一個枚舉來進行,感覺代碼看起來更漂亮,并且易讀性和可維護性也更高了!
(參考文章:http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/StringsinNET20.asp)
namespace System
{
public enum StringComparison {
CurrentCulture,
CurrentCultureIgnoreCase,
InvariantCulture,
InvariantCultureIgnoreCase,
Ordinal,
OrdinalIgnoreCase
}
}可能大家平時在進行字符串比較的時候根本沒有考慮那么多,"= =","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的時候默認的比較方式.例子如下:
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"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"在.net1.1里面通過String.Compare和CultureInfo同樣可以達到以上效果,但在2.0里通過一個枚舉來進行,感覺代碼看起來更漂亮,并且易讀性和可維護性也更高了!
(參考文章:http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/StringsinNET20.asp)


浙公網安備 33010602011771號