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

blg*_*boy 1 c# arrays primitive

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

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

public static void ChangeSomething(ref int[] array)
{
     array[0] = 100;
}
Run Code Online (Sandbox Code Playgroud)

public static void ChangeSomething(int[] array)
{
     array[0] = 100;
}
Run Code Online (Sandbox Code Playgroud)

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

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

MAV*_*MAV 7

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

public static void ChangeSomething(ref int[] array)
{
     array = new int[2];
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

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

Console.WriteLine(array.Length);
Run Code Online (Sandbox Code Playgroud)

你会看到myArray通话后只有2的长度.没有ref关键字,您只能更改数组的内容,因为数组的引用被复制到方法中.


Tom*_*bes 5

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

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

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

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