2016-04-19 2 views
0

Я нашел некоторый код, как это:Try-Catch злоупотребления Exception

try 
{ 
    myClass.do().ToString(); 
} catch() { } 

что, безусловно, приводит к выбросу исключения, когда do() возвращается null. Вместо этого вы можете использовать

(myClass.do() ?? "").ToString(); 

, чтобы избежать исключения. Я также вижу код следующим образом:

for (int i = 0; i < x.length; i++) 
{ 
    if (x.Phases[i].num == activeNum) 
    { 
     try 
     { 
      result = x.Phases[i + 1].obj; 
     } 
     catch (Exception ex) { } 
    } 
} 

Я думаю, что это не очень хорошая практика. Однако я не могу найти ссылок на поддержку моих идей.

Я попытался выполнить поиск в Интернете, но мне не повезло. Большинство ссылок или документации предназначалось для C++ или Java.

Не могли бы вы помочь мне обосновать мою идею с сильной ссылкой или просветить меня, если предыдущие подходы, на самом деле, приемлемы.

+3

«Тем не менее, я не могу найти какую-либо ссылку для поддержки своих идей» - пожалуйста, попробуйте найти труднее .... –

+0

JK: соглашайтесь с @Rob .. давайте будем более снисходительны к ошибкам языка - если сообщение не написано в не- -Английский вообще. – Ian

+0

@Mitch, да, я нашел тысячи ссылок. но большинство из них было недостаточно кратким, чтобы дать конкретную идею, которую я ищу. Должен ли я тратить время на погружение в каждую статью, или я должен спросить кого-то, у кого есть исключительные опыт и идеи, чтобы я мог сосредоточиться на своей собственной задаче? –

ответ

1

Вы правы: использование исключений для целей управления потоком, как правило, является плохой практикой. По этой причине он часто упоминается как anti-pattern.

Подробное описание here. Хотя статья ссылается на Java и C++, это также анти-шаблон в C# по тем же причинам.

Для получения подробных пояснений по C#/Net см. Это MSDN article.

+0

Отлично. Единственное, что я хотел бы добавить к вашему ответу, - это обобщить эти ссылки, начав свой пост с чего-то вроде «Вы правы, что использование исключений для создания потока управления - плохая идея». У тебя есть моя возвышенность. – nhouser9

+0

Спасибо за отзыв! Я все еще пытаюсь получить всю вещь авторского авторского права :-) – AGB

+0

@AGB - Пожалуйста, не пишите «только ссылки». Вы должны добавлять только ссылки для поддержки содержимого, которое вы уже вложили в свой ответ. Ответы на переполнение стека не должны полагаться на ссылки других сайтов, которые никогда не становятся сломанными. – Enigmativity

1

Ваша интуиция правильная. Обработка исключений медленная.

Ветвление (например, базовый скачок при завершении цикла) очень быстро.

Не тратьте время на обработку исключений как средство управления потоком.

+3

Вы оказались правы, но ответы вроде бы должны иметь источники. Но я не был тем, кто занижал его. – nhouser9

+0

Я хотел бы отметить, что вопрос требует не только ссылок, но и утвердительного ответа в отношении правильности альтернативного подхода. Я не подтвердил этот конкретный подход и в духе комментария @ Митча я отказался от «Google для« ОП ». –

+1

Я не собираюсь вступать в затянувшийся аргумент здесь, так что это последнее, что я опубликую. Прежде всего, для этого типа вопроса вы всегда должны указывать ссылки, потому что ваше мнение о том, что один метод лучше другого, не имеет никакого значения без каких-либо доказательств. Во-вторых, он спросил: «Пожалуйста, помогите мне обосновать мою идею с сильной ссылкой или просветить меня, если предыдущий подход, как и выше, был приемлемым». Вы этого не сделали. Вы не оправдали того, что подход, о котором идет речь, был приемлемым, и вы не оправдали его идею ссылкой. Он, как вы выразился, сделал «исключительно запрос» для ссылок. – nhouser9

Смежные вопросы