2013-02-12 45 views
7

在我的工作中,我必須維護一些C#項目。原來的開發人員不在身邊了。最近我注意到一些奇怪的代碼主要發現在這種情況下:奇怪異常處理僞指令

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

什麼是0.ToString()?大部分代碼是在壓力下編寫的,所以我能想到的兩種可能性:

  • 它(如//TODO),爲此,可以搜索到知道你有沒有修復一些東西的佔位符。
  • 這是爲了避免在編譯空的catch子句時發出警告。

是否有任何其他用例或意義?這是好的/壞的編碼風格還是練習?由於這個指令什麼都不做,它會對性能產生一些小的影響,或者編譯器會刪除它嗎?哪個更好的方式來做類似

+7

唯一合乎邏輯的原因是在那裏有一些代碼,所以你可以爲拋出的異常設置一個斷點,儘管這不是一個好辦法; p – leppie 2013-02-12 14:41:44

+0

我猜O是' null'值,並有'NullReferenceException'的斷點 – 2013-02-12 14:44:23

+0

原始程序員的聲音應該已經寫了一些測試...該調試斷點持有人也扼殺了任何例外...... – 2013-02-12 14:44:45

回答

2

正如評論所示,代碼示例包含一件奇怪的事情和一件壞事。

0.ToString(); 

幾乎肯定是這樣,有一行代碼,調試器可以放置一個斷點。這是我見過的用於此目的的陌生人之一。調試會話之後,這行很可能是無意中提交的。

分開的是空的catch塊,這通常不是一個好主意。瑞安蓋茨給出了一個很好的答案,所以我不打算在這一點上擴大。但具有諷刺意味的是,如果有一個合適的catch塊,就會有一行代碼放置一個斷點。

1

不,沒有另一個用例或理由這樣做。這是一種糟糕的編碼習慣。你的代碼不應該捕獲它無法處理的任何異常。

最好的路徑是將其刪除。當引發異常時,您需要了解該用例。然後纔可以添加適當的檢查和/或特定的異常處理代碼。

有問題的代碼是swallowing the exception, which is hazardous to your health的示例。