2013-02-12 4 views
7

В моей работе я должен поддерживать некоторые проекты на C#. Оригинального разработчика больше нет. В последнее время я заметил какой-то странный код в основном найдены в ситуациях, как это:Странное исключение Обработка манекена

try 
{ 
    //some Code 
} 
catch 
{ 
    0.ToString(); 
} 

Что такое 0.ToString() для? Большая часть кода была написана под напряжением, так что я могу думать о двух возможностях:

  • Это заполнитель (например, //TODO), для которых можно найти, чтобы знать, где вы должны исправить некоторые вещи.
  • Во избежание предупреждений при компиляции для пустых предложений catch.

Есть ли какие-либо другие удобства или смысл? Это хороший/плохой стиль кодирования или практика? Поскольку эта инструкция ничего не делает, будет ли она иметь небольшое влияние на производительность или компилятор просто удалит ее? Какие из лучших способов сделать что-то вроде

+7

Единственная логическая причина состоит в том, чтобы иметь некоторый код, чтобы вы могли установить точку останова для генерируемого исключения, хотя и не очень хороший способ сделать это: p – leppie

+0

Я предполагаю, что O является «объектом» с ' null' значение и есть точка останова для 'NullReferenceException' –

+0

Похоже, что исходный программист должен был написать несколько тестов ... Этот отладочный держатель контрольной точки также удушает любые исключения ... –

ответ

2

Как следует из комментариев, в примере кода содержится одна странная вещь и одна плохая вещь.

0.ToString(); 

почти определенно так, что существует строка кода, в которой отладчик может разместить точку останова. Это одна из странных строк, которые я видел для этой цели. Вероятно, эта строка была совершена непреднамеренно после сеанса отладки.

Отдельно от этого является пустой блок catch, что обычно не является хорошей идеей. Райан Гейтс дает прекрасный ответ для этого, поэтому я не собираюсь расширяться по этому вопросу. Но ирония заключается в том, что если бы существовал надлежащий блок catch, была бы строка кода для размещения точки останова.

1

Нет, нет другого смысла в этом вопросе или разумной причине. Это плохая практика кодирования. Ваш код не должен вызывать никаких исключений, которые он не может обработать.

Лучший путь вперед - удалить его. Когда генерируется исключение, вы должны понимать, что usecase. Затем и только после этого вы можете добавить соответствующие проверки и/или специальный код обработки исключений.

Этот код является примером swallowing the exception, which is hazardous to your health.

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