我对此有点困惑,因为我已经读过一个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"关键字澄清意图?
答案 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.
}