[使用System.Memory包,有一种简单的方法来获取存储在装箱实例中的内部数据的(只读)引用(例如ref T
,in T
,Span<T>
或Memory<T>
)值类型?
我想出了这个解决方案,但是它需要固定对象并使用unsafe
。
object o = 1;
var handle = GCHandle.Alloc(o, GCHandleType.Pinned);
Span<int> span;
try
{
var addr = handle.AddrOfPinnedObject();
unsafe
{
span = new Span<int>(addr.ToPointer(), 1);
}
} finally
{
handle.Free();
}
您可以使用in
将值类型设为只读。示例: