Должен ли пользовательский компаратор для строк учитывать нулевые значения - PullRequest
2 голосов
/ 07 апреля 2011

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

Я замечаю, что он упадет, если хотя бы один из параметров строки будет нулевым.

Сравнение возвращает -1, 0 или 1 на основе результата сравнения.

Должен ли подобный код быть зафиксирован для обработки нулей и, если да, что он должен возвращать, если один из параметров был нулевым?

Ответы [ 3 ]

6 голосов
/ 07 апреля 2011

Согласно разделу примечаний метода IComparer.Compare (MSDN)

Сравнение null с любым типом разрешено и не генерирует исключение при использовании IComparable. При сортировке значение null считается меньше, чем у любого другого объекта.

т.е. следующее представляется разумным:

  • Если они оба равны нулю, вернуть 0
  • Если x равен нулю, но не y, вернуть -1 (x
  • Если y равен нулю, но не x, вернуть 1 (x> y).
1 голос
/ 07 апреля 2011

Полагаю, это зависит от назначения компаратора, но я бы склонялся к изменению компаратора для выдачи исключения, если одна из строк равна нулю. Кажется, что это идет вразрез с целью сравнения, которая заключается в том, чтобы возвращать, является ли одна строка больше, равна или меньше, чем другая строка. Нуль не вписывается в этот набор.

1 голос
/ 07 апреля 2011

Ответ будет / должен в конечном итоге быть результатом ваших бизнес-требований.

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

Должно быть исправлено, если:

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