gpt4 book ai didi

c# - 输出参数和异常

转载 作者:IT王子 更新时间:2023-10-29 04:09:37 24 4
gpt4 key购买 nike

假设我有以下代码:

    static void Fjuk(out string str)
{
str = "fjuk!";
throw new Exception();
}

static void Main(string[] args)
{
string s = null;
try
{
Fjuk(out s);
}
catch (Exception)
{
Console.WriteLine(s ?? "");
}
}

当我测试它时,s 已经被初始化为“fjuk!”在 catch block 中使用时。
这是由规范保证的还是依赖于实现的? (我已经搜索了 C# 3 规范,但我自己找不到)

最佳答案

差不多,这是out的一个方面;首先,请注意 out 并不真正存在 - 我们只需要考虑 ref(out 只是 ref 对编译器进行了一些“明确的分配”调整)。 ref 的意思是“传递这个的地址”——如果我们通过地址更改值,那么会立即显示——毕竟,它是在更新内存Main 的堆栈上。它不能对此进行抽象(以延迟写入),因为该值可能是,例如,一些超大的结构,它正在使用 ref 专门用于避免将其复制到堆栈上(一种使用的方法广泛用于 XNA 等)。

关于c# - 输出参数和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8906842/

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