【发布时间】:2021-09-03 17:22:53
【问题描述】:
我正在尝试创建一个 ref return 方法,该方法返回另一个 ref return 方法,但无法使其工作如果这些方法采用 ref 参数
示例代码如下:
public class TestRef
{
public int storage=42;
public ref int Get(ref bool someParam)
{
return ref this.storage;
}
public ref int Get2(bool someParam)
{
var someParam2 = someParam;
ref var result =ref Get(ref someParam2);
return ref result;
}
}
这样做我在底部return ref result; 行看到以下错误:
Error CS8157 Cannot return 'result' by reference because it was initialized to a value that cannot be returned by reference
但是这段代码可以工作:
public class TestRef
{
public int storage=42;
public ref int Get()
{
return ref this.storage;
}
public ref int Get2()
{
ref var result =ref Get();
return ref result;
}
}
我在这里做错了什么?如何通过引用返回结果?
【问题讨论】:
-
Get实际上并没有改变参数,那么你为什么首先通过 ref 传递它?如果你没有理由就不要这样做。 -
尽可能简单地提供重现/示例。
-
强烈考虑是否要变异参数。一般来说,您希望避免副作用。
-
我没有改变参数。通过 ref 传递是一种性能优化。请不要陷入
ref bool someParam的琐碎程度。这只是问题的一个简单示例。 -
@JasonS 通过引用传递这样的参数可能会使其性能更差,而不是更好。只有在传递的参数很大时才可能对性能有帮助(出于这个原因,您应该尽可能避免这种情况)。如果不传递没有充分理由由 ref 传递的参数可以解决您的问题,那么它已经解决了您的问题。请记住,示例应充分代表实际问题,而不是尽可能简单到掩盖实际问题的程度。