使用 C# 7.2,您可以通过in
参数传递结构,这基本上是一个readonly ref
。
class Model {
private readonly TStruct _s;
Model(in TStruct s) {
_s = s;
}
}
在上面的代码中,TStruct
是一个struct
,我是将引用分配给_s
还是复制整个结构?我想要的是避免不必要的内存复制。由于我只需要从s
读取数据,因此我认为readonly ref
可以做到这一点。不幸的是,我无法将_s
标记为readonly ref
.
在 C# 7.2 中,您可以通过 in 参数传递结构,该参数基本上是一个只读引用。
是的,而且是明确的。
在上面的代码中,TStruct 是一个结构体,我是将引用分配给_s还是 复制整个结构?
在分配它_s时复制整个结构。您可以避免可能再有一个副本(实现详细信息(调用构造函数,因为只传入了一个指针,但 JIT 可能会对其进行优化。
在上面的代码中,其中 TStruct 是一个结构体,我是将引用分配给_s还是 do 我复制整个结构?
然后不要使用结构体。通常,指针只能与函数调用或临时变量一起使用 - _s这些都不是。它们的存在是为了避免在操作过程中复制结构,而不是为了更改存储模型。