为什么不必返回此数组?

时间:2014-05-02 23:37:09

标签: c#

我指的是此网站上的代码:http://www.dotnetperls.com/fisher-yates-shuffle

public static void Shuffle<T>(T[] array)
{
    var random = _random;
    for (int i = array.Length; i > 1; i--)
    {
        // Pick random element to swap.
        int j = random.Next(i); // 0 <= j <= i-1
        // Swap.
        T tmp = array[j];
        array[j] = array[i - 1];
        array[i - 1] = tmp;
    }
}

为什么不必返回Shuffle<T>(T[] array)中的数组?我想为了改变变量的传入值,并让它影响调用它的方法中的变量,你必须使用ref。那么为什么没有使用ref

2 个答案:

答案 0 :(得分:2)

来自http://msdn.microsoft.com/en-us/magazine/cc301755.aspx

  

数组是一种机制,允许您将多个项目视为一个   单一集合。 Microsoft®.NET公共语言运行时(CLR)   支持一维数组,多维数组和   锯齿状数组(数组数组)。所有数组类型都是隐式的   派生自System.Array,它本身派生自System.Object。   这意味着所有数组都是引用类型   在托管堆上分配,您的应用程序的变量包含一个   引用数组而不是数组本身。

因为它们是引用类型,所讨论的函数是接收对数组的引用。

答案 1 :(得分:1)

那是因为T[]数组是引用类型。调用Shuffle方法时,不会复制数组本身 - 只有引用,但它仍然指向同一个数组,因此当您在方法中修改它的值时,您将在方法之外看到它好。

相关问题