2011-08-08 87 views
4

我有一個簡單的函數,它試圖從Obout網格過濾器列中獲取值,如果該值爲空,則忽略它並繼續前進。出於某種原因,這段代碼忽略了我的catch塊,並且當輸入字符串爲空時總是顯示一個System.FormatException!嘗試捕捉塊不捕捉?

更奇怪的是,如果我使用visual studio的調試器並在該行上設置一個斷點,catch塊將正常運行(在我繼續該行之後)。我已經確認我的Debug |例外| CLR在拋出時不會被捕獲。我也在生產版本中證實了這一點。

'Get the month selected 
    Dim MonthSelected As Integer 
    Try 
     MonthSelected = CInt(DateCreatedColumn.FilterCriteria.Value) 
    Catch ex As Exception 
     'If value is empty/not a number reset the filter 
     DateCreatedColumn.FilterCriteria.FilterExpression = String.Empty 
     Return 
    End Try 
+0

如果您在調試器中遇到斷點後繼續運行,會發生什麼? –

+0

嘗試刪除臨時文件,asp.net臨時文件,obj文件夾,重建並重試。即使重新啓動IDE。它看起來像默認加載的調試符號不同步。 – Mrchief

+0

爲什麼你在'Catch'塊中有'Return'? – Jodrell

回答

2

我認爲發生這種情況的原因是因爲你不能施放空值的詮釋,所以抓有機會獲得異常之前轉換失敗。

除此之外,我認爲你需要重寫這段代碼。使用異常作爲流量控制的一部分不是一個好主意。例外情況的計算成本很高,只能用於例外的情況。根據定義,你可以計劃和編程的案例並不是特例。使用if語句來檢查空值等,不要使用異常。

+0

特別是在if語句中,你可以使用int32.TryParse,它將返回一個布爾值,確定你的整數解析成功並輸出參數給你的整數)。 – Chris

+0

它不是null,它是一個空字符串。我不應該以任何方式獲取異常(NullReference或FormatException)嗎? 沒有意識到try/catch塊的價格,我會考慮切換到if/then語句。可能會讓整個問題成爲一個有爭議的問題。 –

0

VB有更好的東西,嘗試IsNumeric()方法。