Требуется номер исключения вместо строки сообщения - PullRequest
1 голос
/ 20 июня 2011

Я хочу знать, является ли исключение, например, «исключением переполнения памяти». Но если язык в операционной системе не английский, а, например, китайский или немецкий, сообщение изменится. И я больше не могу просматривать строку сообщения. На MSDN Я не нашел номер исключения для работы. Как найти номер исключения?

   Public Shared Sub Main()
      Dim x As Integer = 0
      Try
         Dim y As Integer = 100 / x
      Catch e As Exception'here, 123 is not working
         if e is ArithmeticException(123) then Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
      End Try
   End Sub

Error handling

Пример (посмотрите на строку <-) </p>

   Try
                    m_DxFilGraphManager.Run()
                Catch ex As System.Runtime.InteropServices.COMException
                    If ex.Message.Contains("0x800705AA") Then '<-- Bad methode. How to do it better?
                        Return "#ERROR: Can not start capturing. It seems to be a possiblity to change the IEEE 1394 bus host controler system driver in your device manager to 'legacy / alt'. " & ex.Message
                    Else
                        Return "#ERROR: " & ex.Message
                    End If
      End Try

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Как правило, в .NET (хотя это не предписывается ничем, кроме соглашения), для каждой причины есть выделенный тип исключения, полученный из System.Exception.Так, например, ваш «переполнение памяти», скорее всего, будет сигнализироваться System.OutOfMemoryException.Изучите иерархию классов System.Exception в MSDN для получения дополнительной информации о типах исключений в .NET Framework.Хотя ваш код и сторонние компоненты всегда могут определять свои собственные.

С учетом вышесказанного, это, безусловно, проблемные случаи, как, например, с IOException.Иногда вы почти не пытаетесь разобрать сообщения об ошибках, которые, конечно, могут быть локализованы.В большинстве случаев вы можете обойти эту проблему.

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

Наконец, слишком грубая обработка исключений так же плоха, как и слишком точная обработка исключений.Это всегда зависит от вашего фактического кода.

1 голос
/ 20 июня 2011

Используйте правильную обработку исключений:

Public Shared Sub Main()
  Dim x As Integer = 0
  Try
     Dim y As Integer = 100 / x
  Catch e As ArithmeticException
     // handle ArithmeticException
  Catch e As Exception
     // handle Exception
  End Try
End Sub

Поймать Exception - это плохая практика - я предлагаю прочитать документацию .

Существует несколько конкретных типов исключений, которые выможно использовать - DivideByZeroException, NotFiniteNumberException происходит от ArithmeticException.

...