C # String.CompareTo не возвращает результаты, которые я ожидаю - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь сравнить строки меньше чем и т.д. - аналогичным образом я бы сравнил числа.

Моя проблема заключается в следующем сравнении возвращает true:

var expectThisToBeFalse = "315160".CompareTo("40000") < 0;

Я знаю, яможно сравнить их как числа, но в моем приложении я не знаю, являются ли они цифрами или буквами.

Может кто-нибудь объяснить, что я пропускаю, и есть ли способ сравнения, который будет работать

Например, будет показано:

«1» меньше, чем «2»

«a» меньше, чем «b»

«aa» больше, чем «b»

и т.д ...

1 Ответ

6 голосов
/ 01 мая 2019

Вы ничего не пропустили.Используемый метод сравнивает две строки в алфавитном порядке.Это означает, что если строка A находится в алфавите перед строкой B, то она возвращает -1.

Поскольку вы сравниваете две строки, а не два числа, функция просматривает первый символ обоихстроки («3» и «4» в вашем примере. Поскольку «3» имеет более низкий код ASCII, чем «4» (51 и 52 соответственно), функция заключает, что «315160» впереди в алфавите *)1004 *, чем "40000", поэтому он возвращает -1. Поскольку вы сравнили результат этой функции (-1) с 0, переменная (правильно) true, потому что -1 <0. </p> Для того, что вы хотите, вам нужно будет запрограммировать свою собственную функцию. Я не знаю, есть ли какая-либо функция уже запрограммирована.

Позже редактирование: больше информации о string.compare .

Позже правка 2: что-то еще показалось мне интересным:

но в моем приложении я не знаю, являются ли они цифрами или буквами.

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

...