提问人:Nila 提问时间:4/28/2021 最后编辑:Jonas WNila 更新时间:4/28/2021 访问量:69
C# 更改以前分配的值 [duplicate]
C# changing previously assigned values [duplicate]
问:
我有一个函数,可以在二维数组“a”上调用并更改数组。但是,它甚至在调用函数之前也会更改以前分配给“a”的任何数组。我不确定我是否明白为什么!
char[][] copy;
copy = a; // a is a also a two dimensional char array
DFSfunction(a); //DFSfunction alters values of a
因此,在调用 DFSfunction 后,“copy”的值也会更改。我怎样才能保留原始“a”的副本?
谢谢!
答:
2赞
Jonas W
4/28/2021
#1
数组在 C# 中是可变的,因此如果您在示例中更改 a,它也会对复制产生影响,因为它们仍然具有相同的引用
所以当你写
copy = a
copy
只是指向同一个数组。a
要解决这个问题,您可以使用 Array.Copy.。
在您的示例中,它可能看起来像这样:
char[][] copy;
char[][] a;
Array.Copy(a, copy, a.Length);
您还可以使用 Array.Clone :
var copy = (char[][])a.Clone();
评论
0赞
Nila
4/28/2021
不幸的是,克隆不起作用,和以前一样的事情正在发生。
0赞
Nila
4/28/2021
我无法让 Arary.Copy 工作,说必须先初始化副本。
0赞
mjwills
4/28/2021
@Nila 将克隆传入方法 - 不要传入 。a
0赞
Mauricio Gracia Gutierrez
4/29/2021
A[] Array2 = Array.ConvertAll(Array1,a => (A)a.Clone());- stackoverflow.com/questions/3464635/deep-copy-with-array
评论
Array.Clone