2012-06-14 31 views
7

爲什麼.NET會按照它們在ASCII table中出現的順序或SQL對它們進行排序的順序對字符「+」和「^」進行排序。.NET如何對特殊字符進行排序?

ASCII table「+」擁有42值和「^」有94個值,但如果你喜歡這個運行代碼:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(); 

該列表將包含以下順序值:

{「!」,「^」,「+」}

LINQ排序生成相同的結果。有人能告訴我什麼樣的.NET類?

+1

你不排序字符,你正在排序字符串。 –

回答

17

.NET不使用ASCII,它使用Unicode。當您執行字符串排序時,.NET(默認情況下)使用當前文化的規則進行排序。在這種情況下,這些規則表明「^」在「+」之前。你可以得到你所期望通過「序」字符串比較器的結果:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^" 
+0

+1。一些排序規則的鏈接可以在我對類似問題的回答中找到 - http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters/9475570#9475570 –

2

這是由當前區域性設置,在CompareInfo屬性定義來定義。每種文化都有針對文化的字符串排序規則。

相關問題