【发布时间】:2021-06-06 11:47:52
【问题描述】:
我不太明白以下代码中的指令是如何流动的。
finally 的主体保证在方法返回之前执行。如果是这样,返回值应该是 0 而不是 1。
您能否解释一下为什么即使finally 已将其重置为 0,返回值仍为 1 的内部机制?
class Container
{
int data = 0;
public int Retrieve()
{
try
{
Inc();
return data;
}
finally
{
Reset();
//return data;
}
}
void Reset()
{
data = 0;
WriteLine("Reset");
}
void Inc() => data++;
}
class ReturnInTry
{
static void Main()
{
Clear();
WriteLine("Start");
WriteLine(new Container().Retrieve());
WriteLine("End");
}
}
【问题讨论】:
-
你的
data是一个int,它是一个值类型。因此,当您执行return data;时,finally块中的data分配不再影响返回值。 -
见this这和你的问题一样。
标签: c# methods return-value try-finally