我想在 C# 核心中设置一个等于其他对象值的对象,而不是通过引用!
x.len=10;
val y=x;
y.len=x.len*2;
我期待
y.len
设置为 20 和 x.len
保持不变,但都y.len
和 x.len
是 20 ,我正在寻找断开连接的方法 x
和 y
.我记得在 VB6 我们有类似 的东西ByRef 和 ByVal 这给了我们控制这个东西的能力,C# Core 3.x 中是否有类似的东西?
最佳答案
I want to set an object equal to other object values in c# core, not by reference!
为此,您需要一个像结构这样的值类型,它不是在堆上分配的,或者对于引用类型,您需要一个深拷贝而不是浅拷贝。在 .Net C# 中,默认情况下,所有类都在堆上分配,是引用类型,当传递对象时,它要么是按值引用(这是另一个指向同一内存的指针),要么是按引用引用(指向指针的指针,它使用 ref和关键字)
Let's review the code
var y=x;
,查看结果,可以安全地假设 y 和 x 都是相同类型但都是引用类型。因此如果 value type
不适合您,然后执行以下操作之一:Create a deep copy by:
一旦你这样做了,你会发现,当属性被修改时,一个对象不会修改另一个对象的浅拷贝
关于C# 核心 3.1 ByRef 和 ByVal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60757036/