Я рассматриваю некоторый код.
Я заметил несколько пустых блоков улова. Не очень хорошая идея, потому что что-то не работает, и вы не можете понять, почему.
Есть ли простой способ найти все пустые блоки try catch в решении?
Я рассматриваю некоторый код.
Я заметил несколько пустых блоков улова. Не очень хорошая идея, потому что что-то не работает, и вы не можете понять, почему.
Есть ли простой способ найти все пустые блоки try catch в решении?
Используйте глобальное диалоговое окно поиска, включите регулярные выражения и затем выполните поиск:
catch:b*\([^)]*\):b*\{:b*\}
FxCop найдет их вместе со многими другими потенциальными проблемами.
Расширен принятый ответ для удовлетворения всех условий, описанных ниже. Обновлен для Visual Studio 2017/2019, работает как для С#, так и для C++.
Используйте диалог поиска (CTRL + SHIFT + F), включите регулярные выражения и выполните поиск:
^(?!\/\/|\/\*).*catch\s*(?:\([^)]*\))*\s*\{\s*(?:(?:\/\/|\/\*).*(\*\/)?\s*)*\}
Матчи:
catch {}
catch{}
catch{
}
catch
{}
catch () {}
catch (...) {}
catch (int x) {}
catch (Exception x) {}
catch (Exception ex){
}
catch(...){
}
} catch (...){
/**/
}
} catch (...){
/**/
///
}
} catch (...){
//
//
/**/
}
catch (...)
{}
catch(...) { //single line
}
catch(...) {
//single line}
catch(...) {
//single line
}
catch(...) { /*multiline*/
}
catch(...) {
/*multiline*/}
catch(...) {
/*multiline*/
}
catch (...){ // int i = 0; }
Не совпадает:
// catch () {}
/* catch () {} */
catch (...){ int i = 0;}
catch (...){
int i = 0;}
catch (...){int i = 0;
}
catch (...){
// Comment
int i = 0;}
catch (...){ int i = 0; // Comment}
У вас есть ReSharper? Это должно освежить проблемы, обнаруженные в коде.
Вот регулярное выражение, которое находит также блоки catch с комментариями внутри:
catch:b*\([^)]*\)[:b\n]*\{([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}
Спасибо Stefan за предложение Regex. Я обнаружил, что предлагаемое регулярное выражение не находит блоки catch, где исключение не указано, то есть:
catch { }
Я слегка изменил Stefan, чтобы исключить опцию исключения:
catch:b*(\([^)]*\))*:b*\{:b*\}
Нажмите Ctrl + Shift + F. Развернуть параметры поиска. Проверить использование регулярных выражений Вставьте это регулярное выражение.
catch\s*(\(\s*Exception(\s*\w+)?\))?\s*\{\s*\}
Расширяя ответ @bobah75, он не узнает эту строку
catch (System.Data.Entity.Core.EntityException ex)
{
}
Итак, чтобы исправить это, вот решение
catch\s*(\(?.+Exception(\s*\w+)?\))?\s*\{\s*([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}
Вы можете проверить это здесь
Если вы можете, я бы предложил использовать Sonar Analyzer. Вы можете добавить его через менеджер NuGet в Visual Studio.
Он покажет все неиспользуемые блоки catch, а также покажет вам, что с ним делать, что-то в строках: "Реализуйте или прокомментируйте, почему пусто".
Кроме того, он покажет вам гораздо больше возможных проблем с кодом.