2009-08-31 2 views
2

Когда я сравнения строк, содержащих положительные/отрицательные числа, например:Как работает String.CompareTo?

int res1 = "-1".CompareTo("1"); 
int res2 = "-1".CompareTo("2"); 

res1 равен 1.
res2 равен -1.

Как работает String.CompareTo? Это означало бы, что порядок "2 -1 1" ...

+1

C# не работает, как некоторые языки сценариев, которые могут сравнивать эти значения как числа. Если вы действительно хотите сравнить числовые значения, вам необходимо преобразовать их в числовой тип, такой как Int32 и т. Д. – ConsultUtah

+0

Не вариант. Я сортировал строки. У этой строки просто было число в конце (такое же начало), и порядок сортировки был странным. – Kevin

ответ

8

MSDN От:

Некоторые буквенно-цифровые символы могут иметь специальные веса, присвоенные их. Например, дефис («-») может иметь очень маленький вес , назначенный ему, так что «coop» и «co-op» отображаются рядом друг с другом в отсортированном списке .

Edit: Забыл упомянуть, что это связано с CompareOptions перечислением используемых string.Compare.

+0

Это лучший ответ до сих пор, поскольку он затрагивает реальную странность, вместо того, чтобы что-то принимать и утверждать, что поведение имеет смысл в этом предположении. – Sean

Смежные вопросы