2016-06-03 7 views
1

Почему это ошибка времени компиляции, когда мы используем ключевое слово params с многомерным массивом?Использование ключевого слова params с многомерным массивом

using System; 

namespace Testing_Params_Keyword 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Calculate in invoked 
      Calculate(25.4, 26.2, 27.8, 28.9); 
     } 

     //Declearing Calculate method 
     public static void Calculate(params float [ , ] Money)//----** Here is error ** 
     { 
      //Divide values of column1 by column2 
      float row1 = Money[0, 0]/Money[0, 1]; 
      float row2 = Money[1, 0]/Money[1, 1]; 

      Console.WriteLine(row1 + row2); 
     }//end of method Calculate 
    } 
} 

дает мне ошибку

Параметр PARAMS должен быть один одномерный массив

Почему он должен быть одномерный массив?

+2

Потому что «Параметр params должен быть одномерным массивом». –

+0

Почему это должен быть одномерный массив? –

+1

Итак, это новый вопрос, можете ли вы обновить свой пост? –

ответ

8

params не связан с передачей многомерных данных, речь идет о передаче переменного количества аргументов в функции. Поскольку этот список аргументов по сути является одномерным, поэтому тип должен быть одномерным массивом.

5

Потому что все, что делает компилятор C#, пусть и магический, должно иметь какую-то логику. Ключевое слово params просто создает массив, размер которого представляет собой количество параметров, которые вы передали. Это то, что может установить компилятор. Однако он не может вывести количество размеров, которые вы намереваетесь, или даже количество элементов на измерение. Поэтому - то, что вы пытаетесь сделать, никогда не скомпилируется.

-1

Это просто дополнение к реальному ответу Шона. Если вы все еще хотите сделать это, вы можете попробовать это, , так как многомерный массив представляет собой массив массивов.

public static void Calculate(params float[][] Money) 
{ 
    //Divide values of column1 by column2 
    float row1 = Money[0][0]/Money[0][1]; 
    float row2 = Money[1][0]/Money[1][1]; 

    Console.WriteLine(row1 + row2);  
} 

вызов это как

float[] a = new float[2]{ 25.4f, 26.2f}; 
float[] b = new float[2]{ 27.8f, 28.9f}; 

Calculate(a, b); 
-2

Это происходит потому, что PARAMS varible основан на аргументы командной строки, где выполняется команда после нажатия войти. Этот метод не допускает множественные размеры и, следовательно, отражается в переменной, поскольку компилятор описывает это.