2015-12-16 28 views
0

我有这样的事情:如何传递给函数的变量,而不影响它

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; 
} 

后,我称之为'main()函数func(),值变化了。

我该如何防止做到这一点,并发挥变量而不改变它们?

+0

从你的方法FUNC() –

+3

@DanielHakimi这已无关,与这里发生了什么我的好人:) – PoweredByOrange

+0

@PoweredByOrange啊删除static关键字!快速反应,这些SMH时刻之一哈哈! –

回答

4

C#中的数组是一个引用类型,所以它总是被引用传递。
你需要在你的func方法来创建输入数组的一个副本:

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

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

我以前试过,但没有与克隆()属性...它现在的工作,谢谢... –

+0

@MehrdadKamali很高兴帮助。 http://stackoverflow.com/help/someone-answers – Dmitry

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; 
}