C#传递并返回一个多维数组

本文关键字:一个 数组 返回 | 更新日期: 2023-09-27 18:25:13

我有一个2D数组,我用数字随机填充。然而,我的代码运行良好,为了更好地组织我的代码,我想把"用数字随机填充"部分放入一个方法中。

数组是从Main()方法创建的,因为我计划将数组传递给其他操作它的方法并从其他方法返回数组。然后我试图编写填充数组的方法,但我不确定如何传递多维数组或返回多维数组。根据MSDN,我需要使用"out"而不是return。

这就是我迄今为止所尝试的:

    static void Main(string[] args)
    {
            int rows = 30;
            int columns = 80;

            int[,] ProcArea = new int[rows, columns];
            RandomFill(ProcArea[], rows, columns);
    }
    public static void RandomFill(out int[,] array, int rows, int columns)
    {
        array = new int[rows, columns];

        Random rand = new Random();
        //Fill randomly
        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < columns; c++)
            {
                if (rand.NextDouble() < 0.55)
                {
                array[r, c] = 1;
            }
            else
            {
                array[r, c] = 0;
            }
        }
    }

这些是我的错误:

"The best overloaded method match for 'ProcGen.Program.RandomFill(out int[*,*], int, int)' has some invalid arguments"
"Argument 1: cannot convert from 'int' to 'out int[*,*]'"

我做错了什么?我能做些什么来纠正这些错误?此外,我的想法是正确的吗,因为我正在使用"out",我所需要做的就是:

RandomFill(ProcArea[], rows, columns);

而不是?:

ProcArea = RandomFill(ProcArea[], rows, columns);

是否有正确的方法来调用该方法?

C#传递并返回一个多维数组

代码中不需要out参数。

数组是passed by reference,直到在方法中使用新引用对其进行初始化。

因此,在您的方法中,如果您不使用新的引用初始化它,那么您可以不使用out参数,并且值将反映在原始数组-中

public static void RandomFill(int[,] array, int rows, int columns)
{
    array = new int[rows, columns]; // <--- Remove this line since this array
                                    // is already initialised prior of calling
                                    // this method.
    .........
}

尝试:

RandomFill(out ProcArea, rows, columns);

Out参数也需要在调用者端显式指定为out

RandomFill(out ProcArea[], rows, columns);

试试吧…它有效:)

using System;
class system
{
    static void Main(string[] args)
    {
            int rows = 5;
            int columns = 5;

            int[,] ProcArea = new int[rows, columns];
            RandomFill(out ProcArea, rows, columns);
        // display new matrix in 5x5 form
            int i, j;
            for (i = 0; i < rows; i++)
            {
                for (j = 0; j < columns; j++)
                    Console.Write("{0}'t", ProcArea[i, j]);
                Console.WriteLine();
            }
            Console.ReadKey();
    }
    public static void RandomFill(out int[,] array, int rows, int columns)
    {
        array = new int[rows, columns];

        Random rand = new Random();
        //Fill randomly
        for (int r = 0; r < rows; r++)
        {
            for (int c = 0; c < columns; c++)
            {
                if (rand.NextDouble() < 0.55)
                {
                    array[r, c] = 1;
                }
                else
                {
                    array[r, c] = 0;
                }
            }
        }
    }
}