Существует бесчисленное множество примеров API, которые выдают исключения, когда предоставляется объект, предоставленный пользователем. Это ни в коем случае не плохой дизайн с хорошим дизайном и указывает, что API проверяет свои входные данные.
Первым примером, о котором я подумал, была функция System.IO.File.Delete(string)
.NET, которая будет выдавать исключение, если удаляемый файл не найден.