Jas*_*onS 2 c# .net-6.0 c#-10.0
我正在尝试创建一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
这样做我在底线上看到以下错误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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?如何通过引用返回结果?
“ ref returns”(C# 7.0)冠军链接到本文,其中列出了下一个“安全返回”规则:
\n您的代码违反了最后一个 - 因为局部变量someParam2返回不安全。接受或删除本地分配(也可以)Get:bool someParamsomeParamGet2 ref boolref var someParam2 = ref someParam;
public ref int Get2(ref bool someParam)\n{\n ref var result = ref Get(ref someParam);\n\n return ref result;\n}\nRun Code Online (Sandbox Code Playgroud)\n想象一下如果someParam是那么int你可以做:
ref int Get(ref int i)\n{\n return ref i;\n}\nRun Code Online (Sandbox Code Playgroud)\n这将导致以下结果:
\nref int Get2(...)\n{\n int local = 1; \n return ref Get(ref local);\n} \nRun Code Online (Sandbox Code Playgroud)\n做一些非常错误的事情。
\n| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |