3

我有一個二維數組,我用數字隨機填充。我爲此工作的代碼工作正常,但是,更好地組織我的代碼我想將「用數字隨機填充」部分放入方法中。C#傳遞並返回一個多維數組

該數組是從Main()方法創建的,因爲我計劃將數組傳遞給其他方法並將其從其他方法中返回。然後我嘗試編寫填充數組的方法,但我不確定如何傳遞多維數組,或者返回一個。根據MSDN我需要使用「出」而不是回報。

這是我到目前爲止已經試過:

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[*,*]'" 

我在做什麼錯了,我能做些什麼來修復這些錯誤?另外,我是正確的思維,因爲我使用的是「走出去」,所有我需要做的是:

RandomFill(ProcArea[], rows, columns); 

代替?:

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

是否有調用有道方法?

回答

6

無需在你的代碼輸出參數。

數組是passed by references,直到你的方法initialise it with new reference

所以在你的方法don't initialise it with new reference那麼你可以去,而無需使用out參數和values will be reflected in an original array -

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

輸出參數需要在調用者的一側被明確指定爲out還有:

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

嘗試:

RandomFill(out ProcArea, rows, columns); 
0

嘗試...工程:)

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