Я выполнил поиск и наткнулся на этот вопрос . Верхний ответ был наиболее полезным, но я хотел получить некоторые разъяснения, и у меня недостаточно репутации, чтобы оставить комментарий, поэтому я создаю новый вопрос для него.
По сути, пользователь "The Digital Gabeg" заявляет, что, если исходная предпосылка кода не соблюдается, выдается ошибка. В приведенном примере метод возвращает true, если длина List <> превышает 50, и false, если нет. Однако если объект, переданный методу, не является List <>, метод не может точно вернуть true или false, поэтому вместо возврата чего-либо он выдает ошибку (хотя, строго говоря, эта логика не совсем точна, если Объект не относится к типу объекта, который имеет члены (то есть, List <> или массив), тогда все равно ложно, что его длина превышает 50 [потому что для того, чтобы иметь длину более 50, ему сначала нужно иметь " длина "определена для объекта]).
Самая очевидная дыра в этом примере состоит в том, что указание параметра метода в качестве List <> позволит избежать возможности передавать что-либо еще методу. Это не совсем мой вопрос, хотя. Ради аргумента, давайте просто предположим, по какой-то причине, что вы не можете гарантировать, что объект, переданный методу, является List <> во время компиляции - даже если бы это было так, такого рода вещи можно обойти, изменив Возвращает тип метода из логического значения в int и указывает возвращаемое значение 0 для false, 1 для true и -1 для всего остального. Это может быть произвольное присвоение значений, но оно обрабатывает ситуацию без необходимости генерировать исключение. Вы могли бы даже заставить его возвращать другие значения, кроме -1, 0 и 1, чтобы представлять другие вещи. Например, если передан массив, а не List <>, вы можете использовать значения 2 и 3 для true и false с предупреждением о том, что в то время как предоставленный объект имел (или не имел) более 50 членов, переданный объект не был строго List <> ...., если такие вещи представлены в документации и / или комментариях.
Таким образом, я предполагаю, что мой вопрос заключается в том, что, поскольку предпосылка данного ответа состояла в том, что исключения должны быть выброшены, когда предположения, стоящие за тем, что они пытаются сделать, подорваны, и существует технически обходной путь для предоставленного примера, такие обходные пути предпочтительнее выбрасывать исключения, если они могут быть найдены, или предпочтительнее выбрасывать исключения, и если это зависит от ситуации, каковы определяющие факторы?