C# ref return 一个 ref return
C# ref return a ref return
我正在尝试创建一个 ref return
方法,该方法 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;
}
}
我在这里做错了什么?我怎样才能 return 通过引用得到结果?
"ref returns" (C# 7.0) champion links to this article 列出下一个“对 return 安全”的规则:
- 对堆上变量的引用对 return
是安全的
- ref 参数对 return
是安全的
- out 参数对 return 是安全的(但必须明确分配,今天已经是这种情况)
- 实例结构字段对 return 是安全的,只要接收者对 return
是安全的
- 结构成员
的return“this”不安全
- 如果作为正式参数传递给该方法的所有 refs/outs 对 return 都是安全的,return 来自另一个方法的引用对 return 是安全的。 30=]
您的代码违反了最后一条 - 导致局部变量 someParam2
对 return 不安全。使 Get
接受 bool someParam
或使 someParam
成为 Get2
ref bool
并删除本地分配(ref var someParam2 = ref someParam;
也可以):
public ref int Get2(ref bool someParam)
{
ref var result = ref Get(ref someParam);
return ref result;
}
我正在尝试创建一个 ref return
方法,该方法 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;
}
}
我在这里做错了什么?我怎样才能 return 通过引用得到结果?
"ref returns" (C# 7.0) champion links to this article 列出下一个“对 return 安全”的规则:
- 对堆上变量的引用对 return 是安全的
- ref 参数对 return 是安全的
- out 参数对 return 是安全的(但必须明确分配,今天已经是这种情况)
- 实例结构字段对 return 是安全的,只要接收者对 return 是安全的
- 结构成员 的return“this”不安全
- 如果作为正式参数传递给该方法的所有 refs/outs 对 return 都是安全的,return 来自另一个方法的引用对 return 是安全的。 30=]
您的代码违反了最后一条 - 导致局部变量 someParam2
对 return 不安全。使 Get
接受 bool someParam
或使 someParam
成为 Get2
ref bool
并删除本地分配(ref var someParam2 = ref someParam;
也可以):
public ref int Get2(ref bool someParam)
{
ref var result = ref Get(ref someParam);
return ref result;
}