gpt4 book ai didi

c# - 如果 inner 方法也接受 C#7 中的参数,为什么不能链接 ref 返回?

转载 作者:太空狗 更新时间:2023-10-29 17:59:58 25 4
gpt4 key购买 nike

我在试验新的 C#7 功能时发现了一些奇怪的东西。给定以下简化场景:

public struct Command
{
}

public class CommandBuffer
{
private Command[] commands = new Command[1024];
private int count;

public ref Command GetNextCommand()
{
return ref commands[count++];
}

public ref Command GetNextCommand(out int index)
{
index = count++;
return ref commands[index];
}
}

public class BufferWrapper
{
private CommandBuffer cb = new CommandBuffer();

// this compiles fine
public ref Command CreateCommand()
{
ref Command cmd = ref cb.GetNextCommand();
return ref cmd;
}

// doesn't compile
public ref Command CreateCommandWithIndex()
{
ref Command cmd = ref cb.GetNextCommand(out int index);
return ref cmd;
}
}

为什么第二种方法会给我以下编译器错误?

CS8157  Cannot return 'cmd' by reference because it was initialized to a value that cannot be returned by reference

我知道编译器不允许你返回一个 ref 给一个 var,它可能会在以后死掉,但我真的不明白有一个额外的 out 参数如何以任何方式改变这种情况。

最佳答案

你不能调用有 ref 或 out 参数的 ref 返回方法

这个改动可以修复

public ref Command CreateCommandWithIndex(out int index)
{
ref Command cmd = ref cb.GetNextCommand(out index);
return ref cmd;
}

然后当你调用这个方法时按值调用它

关于c# - 如果 inner 方法也接受 C#7 中的参数,为什么不能链接 ref 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929614/

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