如何将变量传递给函数而不影响它

时间:2015-12-16 22:37:08

标签: c# variables scope console-application

我有这样的事情:

static void Main()
{
    int[] sqa = new int[2];
    sqa[0] = 1;
    sqa[1] = 2;
    func(sqa);
}

static void func(int[] sqa)
{
    sqa[0] = 0;
    sqa[1] = 1;
}

在我调用func()之后,'Main()函数的值也发生了变化。

如何防止这样做并使用变量而不更改它们?

2 个答案:

答案 0 :(得分:4)

C#中的数组是引用类型,因此它总是通过引用传递 您需要在func方法中创建输入数组的副本:

static void func(int[] input)
{
    int[] sqa = (int[])input.Clone();

    sqa[0] = 0;
    sqa[1] = 1;
}

答案 1 :(得分:0)

这是因为Array是引用类型。您可以通过创建新阵列并将旧阵列中的值复制到新阵列来绕过此步骤。

static void Main()
{
    int[] sqa = new int[2];
    sqa[0] = 1;
    sqa[1] = 2;

    int[] sqa2 = new int[2];
    Array.Copy(sqa, sqa2, sqa.Length);

    func(sqa2);
}

static void func(int[] sqa)
{
    sqa[0] = 0;
    sqa[1] = 1;
}