Попробовать / поймать: Переместить уловы в отдельную функцию? - PullRequest
0 голосов
/ 13 июля 2020
try
{ 
    myInfo = getMyInfoFromAPI(); //stubbed
}
catch (JsonSerializationException exception)
{
    // special handling and logging
}
catch (Exception ex)
{
   // special handling and logging
}

Такой код, на мой взгляд, довольно длинный и его можно разбить на отдельные функции. Можно ли переместить каждую ловушку в блок finally, где он сможет увидеть, есть ли что ловить?

try
{ 
    myInfo = getMyInfoFromAPI(); //stubbed
}
finally {
    handleJsonException();
    handleException();
}


public void handleJsonException() {
    catch (JsonSerializationException exception)
    {
        // special handling and logging
    }
}
public void handleException() {
    catch (Exception exception)
    {
        // special handling and logging
    }
}

Возможно ли это или даже хорошая практика? Мне любопытно, можем ли мы переместить уловки в новые функции, потому что строки кода могут стать довольно длинными и нечитаемыми для одной данной функции.

Ответы [ 2 ]

4 голосов
/ 13 июля 2020

наконец-то не может поймать исключение.

Я рекомендую использовать вот так.

try
{ 
    myInfo = getMyInfoFromAPI(); //stubbed
}
catch (JsonSerializationException ex)
{
    handleJsonException(ex);
}
catch (Exception ex)
{
   handleException(ex);
}

public void handleJsonException(JsonSerializationException ex) {
    // special handling and logging
}

public void handleException(Exception ex) {
    // special handling and logging
}
0 голосов
/ 13 июля 2020

Цель finally - не перехватывать исключение, оно будет вызываться независимо от того, выбрано ли Exception или нет, используйте finally для целей очистки (удаления объектов).

Если вы хотите сделать блок catch модульным на основе типа Exception, вы можете сделать что-то вроде -

try
{
    // Some Code
}
catch (Exception exception)
{
    if (exception is InvalidOperationException operationException)
    {
        MethodCall(operationException);
    }
    else if (exception is JsonSerializationException  jsonSerializationException)
    {
        AnotherMethodCall(jsonSerializationException);
    }
    
    // If want to throw the exception further.
    throw;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...