【发布时间】:2020-07-25 07:48:08
【问题描述】:
为什么这不起作用?
我创建了结构并希望通过 ref 将其返回。
public readonly struct AuditResult
{
public readonly bool AcceptChanges;
public readonly string Reason;
public AuditResult(bool acceptChanges, string reason)
{
AcceptChanges = acceptChanges;
Reason = reason;
}
public static ref AuditResult AcceptAuditResult()
{
var auditResult = (new AuditResult(true, string.Empty));
ref AuditResult res = ref auditResult;
return ref res;
}
}
发生此错误:
CS8157 无法通过引用返回“res”,因为它已初始化为无法通过引用返回的值
在这种情况下我的变量是ref?
【问题讨论】:
-
Ref 结构体存在于堆栈中。当一个方法返回时,它的堆栈帧被释放,包括它分配的任何 ref 结构,因此对该内存的任何引用都是无效的,编译器知道这是不安全的。