使用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
。
答案 0 :(得分:1)
使用C#7.2,您可以通过in参数传递结构,该参数基本上是只读引用。
是的,这是明确的。
在上面的代码中,TStruct是一个结构,我是将引用分配给_s还是我 复制整个结构吗?
在将整个结构分配给ti _s时复制整个结构。您可以避免再有一个副本(实现细节)调用构造函数,因为那里只传入了一个指针,但是JIT可以将其优化。
在上面的代码中,TStruct是一个结构,我是否将引用分配给_s或 我复制整个结构吗?
然后不使用结构。通常,指针只能与函数调用或临时变量一起使用-_s都不是。它们在那里是为了避免在操作过程中复制结构,而不是更改存储模型。