Выбор ответа Middle Исключения обновлено

return в try и finally

Вопрос

Что вернёт метод?

static int Get()
{
    int x = 1;
    try { return x; }
    finally { x = 2; }
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 1. При return x в try значение 1 уже вычислено и сохранено для возврата. finally выполняется, меняет локальную x на 2, но на сохранённое значение это не влияет.

Варианты ответа

  1. 2
  2. 3
  3. 1правильный ответ
  4. Ошибка компиляции: нельзя менять переменную в finally

Разбор

При return x в try значение 1 уже вычислено и сохранено для возврата. finally выполняется, меняет локальную x на 2, но на сохранённое значение это не влияет. Для int вернётся 1. Если бы x был ссылкой на изменяемый объект, изменения его полей в finally были бы видны. return внутри finally в C# запрещён, а изменение переменных разрешено.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.