Попробуйте поймать блок не ловит? - PullRequest
4 голосов
/ 08 августа 2011

У меня есть простая функция, которая пытается получить значение из столбца фильтра сетки 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

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

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

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

0 голосов
/ 08 августа 2011

В VB есть что-то лучшее для этого, попробуйте метод IsNumeric ().

...