Если можно предвидеть, что создание может завершиться неудачей, но большая часть кода приложения ожидает, что оно будет работать, вам действительно следует реализовать две версии метода создания, одна из которых должна либо завершиться успешно, либо выдать исключение, и другой из которых должен указывать на ожидаемые сбои с помощью других средств, кроме генерации исключения и генерирования исключения только для сбоев, которые вызывающий, вероятно, не ожидает (например, CpuIsOnFireException). Обычный шаблон для этого - метод TryCreate, возвращающий логическое значение, указывающее успех, сохраняющий созданный аргумент в аргумент by-ref. Мне не очень нравится этот шаблон, так как он не предоставляет никаких средств для обозначения чего-либо, кроме статуса «сбой при прохождении» (т.е. ничего о том, почему он не прошел). Я думаю, что было бы лучше иметь функцию try, возвращающую либо новое, либо значение null, но иметь аргумент by-ref, указывающий причину сбоя. Обратите внимание, что этот подход позволит лучше использовать неявную типизацию (например, ключевое слово «var» в C #).