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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

Т.е. следующее кажется разумным:

  • Если они оба нулевые, вернуть 0
  • Если x равен нулю, но не y, вернуть -1 (x
  • Если у - ноль, но не х, вернуть 1 (х> у).

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

Другие вопросы по тегам