C#传递int [](数组)有和没有ref

时间:2015-09-03 07:07:25

标签: c# arrays primitive

我对此有点困惑,因为我已经读过一个int []数组,虽然int是一个基本类型,因为它是一个数组,它是一个引用类型变量。

方法之间有什么不同,例如:

public static void ChangeSomething(ref int[] array)
{
     array[0] = 100;
}

public static void ChangeSomething(int[] array)
{
     array[0] = 100;
}

当修改数组时,我可以在索引0处看到这两个调用的新值100。

是否有一些不同的事情发生在封面下,使一个人比另一个更好? VS IDE是否允许这两者只是因为它可能是" ref"关键字澄清意图?

2 个答案:

答案 0 :(得分:7)

不同之处在于您可以直接在方法中分配原始变量。如果您将方法更改为:

var myArray = new int[10];
ChangeSomething(ref myArray);

Console.WriteLine(array.Length);

并称之为:

myArray

通话结束后,您会看到ref的长度为2。如果没有{{1}}关键字,则只能更改数组的内容,因为数组的引用会被复制到方法中。

答案 1 :(得分:4)

如果修改数组的项目,则没有区别。

但是如果你用更大的数组重新定义了数组本身,那就有区别了:

public static void ChangeSomething(ref int[] array)
{
     array = new int[100]; //you are changing the variable of caller
}

public static void ChangeSomething(int[] array)
{
     array = new int[100]; //you are changing local copy of array variable, the caller array remains same.
}