Производительность здесь не самая важная проблема. Вопрос в том, какой из двух приводит к более читаемым/поддерживаемым/проверяемым программам. Вы можете беспокоиться о производительности позже.
В общем, не используйте исключения для управления потоком. Они эффективно являются нелокальными goto
, что делает программы более трудными для чтения и наблюдения. Таким образом, они должны быть зарезервированы для исключительных ситуаций. Если вам удастся избежать использования блока управления потоком try-catch
, не делайте этого. Ваши программы станут более читабельными и удобными.
«Право» способ справиться с этой ситуацией является
var list = someMethod();
if(list == null || list.Length == 0) {
// handle something bad
}
string a = list[0];
if(a != null) {
// go
}
Вы можете избежать проверки, что list
не является недействительным и не пусто, если есть договор (Contract.Ensures
), что гарантирует возвращаемое значение someMethod
является но не пустым.
Это правда, однако, что исключения являются дорогостоящими. Независимо от того, повлияют ли они на производительность вашей программы (т. Е. Узкое место), это еще один вопрос. Но правильно используются исключения, как правило, не являются узким местом (кто заботится о производительности, когда ваша заявка терпит крах?)
Отмените слово «быстрее», это не имеет значения. И это даже не правильный способ использования try-catch, поскольку вы как бы троллируете CLR. – BoltClock
просто пример человека ... – carlosdubusm
@BoltClock, нет, это не так. Если исключение произойдет. Это медленнее. – CaffGeek