2011-08-08 176 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()方法。