gpt4 book ai didi

c# - try { return x; 中到底发生了什么? } 最后 { x = null; } 陈述?

转载 作者:IT王子 更新时间:2023-10-29 03:28:53 27 4
gpt4 key购买 nike

我在另一个问题中看到了这个提示,想知道是否有人可以向我解释这究竟是如何工作的?

try { return x; } finally { x = null; }

我的意思是,finally 子句是否真的在 return 语句之后执行?这段代码有多线程不安全?您能想到可以通过 w.r.t. 完成的任何其他 hackery 吗?这个 try-finally 黑客?

最佳答案

finally 语句被执行,但返回值不受影响。执行顺序为:

  1. return语句执行前的代码
  2. 计算返回语句中的表达式
  3. 最后 block 被执行
  4. 返回第2步计算的结果

这里有一个简短的程序来演示:

using System;

class Test
{
static string x;

static void Main()
{
Console.WriteLine(Method());
Console.WriteLine(x);
}

static string Method()
{
try
{
x = "try";
return x;
}
finally
{
x = "finally";
}
}
}

这会打印“try”(因为这是返回的内容),然后打印“finally”,因为这是 x 的新值。

当然,如果我们要返回对可变对象(例如 StringBuilder)的引用,那么在 finally block 中对该对象所做的任何更改在返回时都是可见的——这不会影响返回值本身(仅供引用)。

关于c# - try { return x; 中到底发生了什么? } 最后 { x = null; } 陈述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com