使用ref关键字和不使用ref关键字在C#中传递int[](数组)

3

我对此有些困惑,因为我读过一个int[]数组,虽然int是一个原始类型,但由于它是一个数组,因此它是一个引用类型变量。

那么像这样的方法有什么不同呢:

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

and

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

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

在内部是否有不同的操作使其中一个更好呢?Visual Studio IDE是否允许同时使用这两种方式,因为“ref”关键字能够表明意图?

2个回答

8
区别在于您可以直接在方法中直接分配原始变量。如果您将方法更改为以下内容:
public static void ChangeSomething(ref int[] array)
{
     array = new int[2];
}

然后像这样调用:

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

Console.WriteLine(array.Length);

在调用之后,您会发现myArray只有长度为2。如果没有使用ref关键字,则只能更改数组的内容,因为数组的引用被复制到方法中。


5

如果您修改数组的项,没有任何区别。

但是,如果您重新定义了具有较大数组的数组本身,则存在差异:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接