Кстати, комментарий выше о "try / catch" может быть правдой, но не во всех случаях.Это зависит от того, как вы строите свое решение.В вашей сборке Release отключите как можно больше флагов, которые пахнут как «Отладка» даже на расстоянии.Чем меньше времени выполнения велено запоминать следы стека и прочее во время сборки, тем быстрее становится «try / catch».
Кстати, # 2: знаменитые архитектурные паттерны «Скажи, не спрашивай!»(TDA) и «Принцип открытого закрытия» (OCP) запрещают использование такого печально известного кода, как «if (! (Fp = fopen (...))». Они не просто поощряют васиспользовать «попробовать / поймать», но заставить вас сделать это, потому что OCP требует не только подчиняться в вашем собственном коде, но и при вызове чужих вещей (например, библиотек, таких как stdio).
Почему OCP, а не TDAв последнем предложении? Потому что вам не разрешено расширять смысл существующего кода. Придерживаясь простого примера «fopen», что вы будете делать, когда результат будет нулевым? Почему именно «fopen» потерпел неудачу? Вы могли быпроверьте, осталось ли достаточно свободного места, или если файловая система доступна для записи. Если имя файла является допустимым. Или еще что-то. Тем не менее, ваша цель не может быть достигнута: откройте файл. Представьте себе приложение без головы, поэтому не нужно вмешательство пользователяВозможно. Теперь что? Нет никаких оснований для дальнейшей работы с вещами, потому что «fopen» не удался. Вам понадобится резервная стратегия. Точка. Если «fopen» потерпел неудачу, он потерпел неудачу.
Практическое правило. Думайте о своем коде как о всегда успешном (KIS).Если ваш код может «потерпеть неудачу» с точки зрения того, что набор результатов регулярно может содержать элементы или нет, поместите логику в класс.Возможно, вам придется распределять данные, свойства, вопросы и методы по различным классам (TDA).Возможно, вам придется перенастроить свой код в соответствии с SLA.
В вашем случае, однако, убедитесь, что элемент существует.Если вы не можете, это не ваша вина.Глубоко в своем коде (оболочка, где все ошибки прежних кодеров облагораживаются) преобразуйте необходимые данные в другую сущность так, чтобы дальше не было необходимости «если».