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
4

2 回答 2

2

我认为发生这种情况的原因是因为您不能将空值强制转换为 Int,因此在 catch 有机会获取异常之前强制转换失败。

除此之外,我认为您需要重写此代码。将异常用作流控制的一部分并不是一个好主意。异常在计算上是昂贵的,并且应该只在异常情况下使用。根据定义,您可以计划和规划的案例并不例外。使用if语句检查空值等,不要使用异常。

于 2011-08-08T13:55:40.587 回答
0

VB 对此有更好的选择,试试 IsNumeric() 方法。

于 2011-08-08T13:58:25.097 回答