数组返回开始值C#

时间:2016-12-08 11:41:07

标签: c# arrays default

我正在使用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;
        }

这些方法没有用,是否有更简单的方法或我做错了什么?

3 个答案:

答案 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时,您不是要复制对象数据,而是复制对象数据。因此,两个标识符(menuItemsParIntdefmenuItemsParInt)都指向相同的数据。

要复制数组中的数据,可以使用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();´

这可以克隆你的初始数组。希望它能以任何方式帮助。