通过引用而不是值将对象传递到数组中

Sha*_*dow 0 c# arrays ref

我正在研究一些C#代码,并且有8个点,它们被放入6个点数组中,每个数组都有不同的组合,类似于下面的示例:

Point pt10 = new Point(10,10);
Point pt20 = new Point(20,20);
Point pt30 = new Point(30,30);

Point[] ptArr1 = {pt10, pt20};
Point[] ptArr2 = {pt10, pt30};
Run Code Online (Sandbox Code Playgroud)

然后我注意到,在初始化Point数组之后,对数据的更改没有反映在数组中,这告诉我数组包含原始Points的副本,而不是Points本身.这在内存方面是否浪费,如果是这样,有没有办法让数组引用Points,而不是复制值?

Szy*_*mon 5

您观察到的行为碰巧在C#中结构化,因为:

根据作业复制结构.将结构分配给新变量时,将复制所有数据,并且对新副本的任何修改都不会更改原始副本的数据.在处理诸如Dictionary之类的值类型集合时,这一点很重要.(来源)

如果要引用存储在数组中的点,以便变量中的更改反映在数组中,则应该使用类作为点,而不是结构.