Почему List.Sort (IComparer) и List.Sort (сравнение) обрабатывают угловые случаи по-разному?
Поскольку программисты этих функций решили так. После того, как было решено, поведение больше не может быть изменено без нарушения существующего кода. Единственный способ изменить это - отказаться от всего класса, чтобы создать новый. И эти мелкие проблемы не стоили ничего подобного.
Если только они или кто-то из этого возраста случайно не оказались поблизости, угадать их причины было бы просто - угадывание.
Добро пожаловать в технический долг / исторически сложившиеся проблемы. Вы найдете их на каждом языке, в каждой библиотеке. Несмотря на все усилия и ресурсы, которые были затрачены на его разработку, .NET не является исключением.
При этом, по предположению / профессиональному мнению:
Есть ли основания против попытокиспользовать Comparer.Default.Compare, когда параметр сравнения имеет значение null?
Есть ли какая-либо причина для выдачи ошибки / ошибки компилятора Invalid Cast, а не для неявного приведения? Да, потому что неявные операции вызывали всевозможные проблемы в 60-летнюю историю программирования. Быть агрессивным с «исправлениями» - именно то, что вызвало примеры PHP и Javascript в этом комиксе . Подсказка: JS делает неправильные вещи в обоих случаях. Случается, что случайно получается правильный результат.
Ничто не глупо, как код, который пытается быть умным. Попытка исправить входную переменную самостоятельно - особенно нулевое значение - это случай, когда нужно быть умным. Если бы они хотели компаратор по умолчанию, они могли бы просто использовать Sort () без параметров. И проверка значения на ноль перед передачей его функции в качестве аргумента тривиальна.
Исключения составляют ошибки, которые программист не должен игнорировать. Дать нулевое значение прямо здесь, в этой области.