Должен ли пользовательский компаратор для строк учитывать нулевые значения
Я смотрю на код другого пользователя для пользовательского компаратора, который сравнивает строки.
Я заметил, что он упадет, если хотя бы один из строковых параметров будет нулевым.
Сравнение возвращает -1, 0 или 1 в зависимости от результата сравнения.
Должен ли подобный код быть исправлен для обработки нулей, и если да, что он должен возвращать, если один из параметров был нулевым?
3 ответа
Ответ будет / должен в конечном итоге быть результатом ваших бизнес-требований.
Вероятно, код был написан для определенного набора требований, и нулевые значения не были частью рассмотрения.
Это должно быть исправлено, если:
- это нужно вашему бизнесу
- у вас когда-нибудь есть шанс, что входы будут нулевыми
- вы работаете с дефектами из-за этого
- несколько компонентов используют эту функциональность
Согласно разделу примечаний метода IComparer.Compare (MSDN)
Сравнение null с любым типом разрешено и не генерирует исключение при использовании IComparable. При сортировке значение null считается меньшим, чем у любого другого объекта.
Т.е. следующее кажется разумным:
- Если они оба нулевые, вернуть 0
- Если x равен нулю, но не y, вернуть -1 (x
- Если у - ноль, но не х, вернуть 1 (х> у).
Я предполагаю, что это зависит от цели компаратора, но я бы склонялся к изменению компаратора, чтобы выдать исключение, если одна из строк равна нулю. Кажется, что это идет вразрез с целью сравнения, которая заключается в том, чтобы возвращать, является ли одна строка больше, равна или меньше, чем другая строка. Нуль не вписывается в этот набор.