Есть ли в C# аналог defer из Go

Есть ли в C# что-то наподобие defer из Go?

В Go можно было сделать так например:

func f() {
    defer return stack.Top(); // Указываем значение, которое нужно вернуть
    stack.Pop(); // Удаляем элемент. Но функция все равно вернет его значение
}

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

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

Конкретно для этого примера всё просто.

Эквивалент:

T MyFunc<T>(Stack<T> stack) // сигнатуру поменял для видимости, что к чему
{
    return stack.Pop(); // извлекает элемент из стека Stack<T> и возвращает значение
}

Что касается запоминания возвращаемого значения, то в этом нет необходимости. Обычно если значение результат вычисления известно, то его можно просто вернуть, и далее ничего не делать. Это как бы логично.

Но если очень надо, то обычный код без фокусов - вполне реальное решение.

T MyFunc<T>(Stack<T> stack)
{
    T result = stack.Peek();
    stack.Pop();
    return result;
}
→ Ссылка