我正在使用C#中的数组,我希望它再次拥有默认值我尝试创建第二个数组如下:
static readonly int[] defmenuItemsParInt = { 60, 60, 0 };
static int[] menuItemsParInt = defmenuItemsParInt;
由于某种原因,这改变了默认数组,所以我尝试了:
static int[] menuItemsParInt = { 60, 60, 0 };
static readonly int[] defmenuItemsParInt = menuItemsParInt;
(数组在主类上面声明)
我都使用了我的重置功能:
static void reset()
{
menuItemsParInt = defmenuItemsParInt;
}
这些方法没有用,是否有更简单的方法或我做错了什么?
答案 0 :(得分:1)
一种解决方案是使用CopyTo函数,如下所示。 CopyTo函数将数组defmenuItemsParInt的所有元素复制到作为第一个参数提到的目标数组。这样,因为元素只是被复制,所以在任何情况下它都不会影响默认数组。
static readonly string[] defmenuItemsParInt = { 60, 60, 0 };
static string[] menuItemsParInt = new int[defmenuItemsParInt.Length];
defmenuItemsParInt.CopyTo(menuItemsParInt, 0);
答案 1 :(得分:1)
C#中的对象(包括数组)是stored by reference。这意味着当您编写menuItemsParInt = defmenuItemsParInt
时,您不是要复制对象数据,而是复制对象数据。因此,两个标识符(menuItemsParInt
和defmenuItemsParInt
)都指向相同的数据。
要复制数组中的数据,可以使用Clone
方法:
static int[] menuItemsParInt = (int[])defmenuItemsParInt.Clone();
恢复更改时应该这样做:
static void reset()
{
menuItemsParInt = (int[])defmenuItemsParInt.Clone();
}
答案 2 :(得分:0)
您正在更改元素,因为您的第二个数组实际上指向它们。试试这个:
string[] defmenuItemsParInt = { "60", "60", "0" };
int[] menuItemsParInt = (int[]) defmenuItemsParInt.Clone();´
这可以克隆你的初始数组。希望它能以任何方式帮助。