Может ли оригинальный тип исключения быть найден в переброшенном универсальном исключении? - PullRequest
0 голосов
/ 14 апреля 2011

Я пытаюсь поймать пользовательское исключение разрешения - то есть пользователь делает что-то, чего не позволяет его уровень доступа к системе, исключение разрешения выдается.Моя проблема в том, что исключение перехватывается и затем перебрасывается как обобщенный System.Exception.

. Можно ли как-то определить исходный тип исключения, не прибегая к сравнению строк, например if ex.ToString.Contains("Permission denied") Then ...?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Примерно так:

Try


Catch e as Exception
    While e IsNot Nothing AndAlso Not TypeOf(e) is PermissionException
       e = e.InnerException;
    End While

    ' Rethrow if we can't handle it
    If e Is Nothing Then Throw 

    ' do whatever needs to be done when PermissionException is thrown

End Try
0 голосов
/ 14 апреля 2011

Вы можете использовать свойство InnerException базового класса Exception и выполнять цикл до нуля

        try
        {
        }
        catch (Exception e)
        {
            while (e.InnerException != null)
                e = e.InnerException;

            Console.WriteLine(e.Message);
        }
...