class Graphics
public static Image[] ImageArray = new Image[16];
在另一个班级,
//Copy original Array
tempArray = Graphics.ImageArray;
我正在努力使tempArray
成为静态变量的精确副本,不应该更改,但tempArray
需要更改。它不是复制静态变量,而是为它添加另一个变量名。
因为如果我更改tempArray
,就好像我改变ImageArray
一样。
如何通过使ImageArray
成为非静态副本来简单地复制tempArray
?
答案 0 :(得分:4)
为什么一个新变量复制我的静态变量,改变我的静态变量?
简短的回答是,因为它不会复制您的静态变量。它创建对同一静态变量的第二个引用,而不进行复制。这就是为什么通过tempArray
变量更改数组相当于通过ImageArray
变量更改数组。
那么......我该如何复制呢?
这取决于您需要的副本类型:
Array.Copy
方法ToArray
方法,并在Select
内制作图像副本。浅拷贝:
tempArray = new Image[Graphics.ImageArray.Length];
Array.Copy(Graphics.ImageArray, tempArray, Graphics.ImageArray.Length);
深拷贝:
tempArray = Graphics.ImageArray.Select(img => new Image(img)).ToArray();
答案 1 :(得分:1)
考虑使用tempArray = Graphics.ImageArray.Clone()
。
请注意Clone()
创建一个浅层的数组副本,对于深层副本,请使用:
tempArray = Graphics.ImageArray.Select(i => i.Clone() as Image).ToArray()
答案 2 :(得分:0)
SFML有自己的参数来复制Image。应该先检查SFML.Image定义。
//Create Image Array and fill it
Image[] tempArray = new Image[16];
for (int z = 0; z < 16; z++)
{
tempArray[z] = new Image(Graphics.ImageArray[z]);
}