考虑以下方法(小提琴):
void test(Span<int> param)
{
//Fail, the stackalloc'ed buffer could be exposed.
param = stackalloc int[10];
}
void test2(Span<int> param)
{
//OK
Span<int> local = stackalloc int[10];
}
我不明白为什么param = stackalloc int[10];会产生错误:
stackalloc不能在此上下文中使用类型为“Span”的表达式的结果,因为它可能会暴露在包含方法之外
Span是一个ref struct但是(尽管它的名字)它仍然是一个值类型,所以任何修改param都不会反映在调用者对象上。
我认为是param一个具有初始值的局部变量,我不明白为什么test2编译而test没有。
stackalloc int[10]in的返回值如何test逃出方法的作用域?