这可能是一个简单的问题,我对OOP一般都是新手.
如果我有一个带有一个int数组属性的简单类(和构造函数)
public class MyClass
{
public int[] MyProperty {get; set;}
public MyClass(){}
}
Run Code Online (Sandbox Code Playgroud)
如果对象没有更改属性,如何将属性值设置为对象的值?
MyClass C1 = new MyClass();
MYClass C2 = new MyClass();
int[] x = new int[3] {1,2,3};
C1.MyProperty = x;
x[2] = 7; //this changes C1.MyProperty to a value of {1,2,7}
C2.MyProperty = x;
Run Code Online (Sandbox Code Playgroud)
我希望C1的属性的2索引保持值3,即使我改变x [2]的值.类似地,我希望C2属性索引2值始终为7.是否有某种方式我可以将属性设置为ValueOf(x)?我需要某种静态关键字吗?
这一行:
C1.MyProperty = x;
Run Code Online (Sandbox Code Playgroud)
意味着MyProperty指向相同的引用x,因此x您的属性中的元素的任何更改也是可见的.该代码目前正在进行浅层复制.
一个简单的修复可能是:
C1.MyProperty = x.ToArray();
Run Code Online (Sandbox Code Playgroud)
ToArray将创建一个新数组/一个新引用并将其分配给MyProperty.
你应该寻找深度复制对象.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |