Это не просто вопрос вкуса, рассмотрим
if (!File.Exists(fileName)) throw new ArgumentException("...");
var s = File.OpenText(fileName);
Это похоже на ваш пример, но есть несколько причин (параллелизм, права доступа), почему метод OpenText()
может все еще не работать, даже с ошибкой FileNotFound. Таким образом, проверка Exists просто дает ложное чувство безопасности и контроля.
Это умонастроение, когда вы пишете метод GetItemByIdx, это, вероятно, выглядит довольно разумно. Но если вы просматриваете случайный фрагмент кода, обычно есть много предположений, которые вы можете проверить, прежде чем продолжить. Просто не практично проверять их все снова и снова. Мы должны быть избирательными.
Так что в простом методе передачи, таком как GetItemByIdx, я бы поспорил с избыточными проверками. Но как только функция добавляет больше функциональности или если есть очень явная спецификация, которая говорит что-то о idx, этот аргумент оборачивается.
Как правило, должно быть сгенерировано исключение, если четко определенное условие нарушено и это условие актуально на текущем уровне. Если условие относится к более низкому уровню, то пусть этот уровень обрабатывает его.