Есть ли в 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;
}