Как лучше оформить метод с предусловиями?

Есть два метода. Первый вариант:

public void MethodOne(uint value)
{
    if (value < 100)
    {
        if (value % 2 != 0)
        {
            // код метода
        }
        else
        {
            throw new ExceptionTwo();
        }
    }
    else
    {
        throw new ExceptionOne();
    }
}

Второй вариант:

public void MethodTwo(uint value)
{
    if (value >= 100)
        throw new ExceptionOne();
        
    if (value % 2 == 0)
        throw new ExceptionTwo();

    // код метода
}

Какой из них наиболее предпочтителен?


Ответы (1 шт):

Автор решения: PashaPash

Предполагается, что исключения могут повлиять на логику выполнения программы вне этого метода (на выброшенное исключение ExceptionOne - одно действие, на ExceptionTwo - другое действие)

Есть шанс, что в вашем случае вообще не должно быть исключений. Исключение - это не ошибка. Это реально неожиданная, исключительная ситуация.

  • Двери лифта открылись - а лифта нет - это исключение.
  • Вы нажали 16 этаж, а лифт по дороге остановился на 10-ом - не исключение.

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

Если у вас есть некий вызывающий код, который реально ожидает, что этот метод бросит исключение, и в котором есть нормальный, частый путь выполнения, который завязан на тип исключения - значит вам стоит переписать код без исключений, на возврат какого-нибудь Result вместо void.

→ Ссылка