如何使用更改变量静态设置属性

1 .net c# setter properties

这可能是一个简单的问题,我对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)?我需要某种静态关键字吗?

Hab*_*bib 5

这一行:

C1.MyProperty = x;
Run Code Online (Sandbox Code Playgroud)

意味着MyProperty指向相同的引用x,因此x您的属性中的元素的任何更改也是可见的.该代码目前正在进行浅层复制.

一个简单的修复可能是:

C1.MyProperty = x.ToArray();
Run Code Online (Sandbox Code Playgroud)

ToArray将创建一个新数组/一个新引用并将其分配给MyProperty.

你应该寻找深度复制对象.