Получить тип исключения из исключения

У меня есть приложение для соединения SAP с вызовом RFC, и мне нужно показать пользователю уведомление о сбое соединения при попытке установить вызов RFC с SAP. И я получаю следующее исключение.

{
    SAP.Middleware.Connector.RfcCommunicationException: 
    LOCATION    CPIC (TCP/IP) on local host with Unicode
    ERROR       partner '151.9.39.8:8010' not reached
    TIME        Wed Jul 16 10:32:05 2014
    RELEASE     720
    COMPONENT   NI (network interface)
    VERSION     40
    RC          -10
    MODULE      nixxi.cpp
    LINE        3286
    DETAIL      NiPConnect2: 151.9.39.8:8010
    SYSTEM CALL connect
    ERRNO       10060
    ERRNO TEXT  WSAETIMEDOUT: Connection timed out
    COUNTER     2
} 

И с помощью этого исключения мне нужно уведомить пользователя. Но как я могу определить, является ли это SAP.Middleware.Connector.RfcCommunicationException или нет, потому что я тоже обрабатываю другие исключения. Есть ли способ получить тип исключения без конкатенации приведенной выше строки исключения.

В моем блоке try catch я сейчас делаю это, но он не работает.

catch (Exception ex)
{  
    if (ex.ToString().ToLower() == "rfccommunicationexception")
    {
        MessageError = "RFC error";
    }
}

4 ответа

Решение

Ты можешь использовать is

Например:-

catch (Exception exception )
{  
    if (exception is SAP.Middleware.Connector.RfcCommunicationException)
    { 
       ////Your code
    }
}

Или, как Resharper предлагает лучше поймать конкретное исключение, как показано ниже:

catch(SAP.Middleware.Connector.RfcCommunicationException)
{
    // Your code    
}

Поймайте исключение явно:

catch(SAP.Middleware.Connector.RfcCommunicationException)
{
    // RFC exception
}
catch(Exception e)
{
    // All other exceptions
} 

Лучший подход к этому состоит в том, чтобы иметь несколько блоков catch:

try
{
   // your code
}
catch(RfcCommunicationException rfcEx)
{
  // handle rfc communication exception
}
cathc(Exception ex)
{
  // handle other exception
}

Вы можете попробовать это:

// Catch the exception
catch(exception e)
{
    // Check if the type of the exception is an RFC exception.
    if(e is SAP.Middleware.Connector.RfcCommunicationException)
    {

    }
    else // It is not an RFC exception.
    {

    }
}

Или вы могли бы попытаться catch каждое исключение отдельно, как показано ниже:

catch(SAP.Middleware.Connector.RfcCommunicationException exception)
{

}
catch(exception e)
{

}
Другие вопросы по тегам