考虑以下方法(小提琴):
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
逃出方法的作用域?