Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中传递二维数组的一维#_C#_Multidimensional Array - Fatal编程技术网

C# 在C中传递二维数组的一维#

C# 在C中传递二维数组的一维#,c#,multidimensional-array,C#,Multidimensional Array,我从C搬到了C。 我有一个接受数组的函数。我想把二维数组的一维传递给这个函数 C代码为:- void array_processing(int * param); void main() { int Client_ID[3][50]; /* Some Processing which fills this array */ array_processing(&Client_ID[1]); } 现在,当我想在C#中执行同样的操作时,

我从C搬到了C。 我有一个接受数组的函数。我想把二维数组的一维传递给这个函数

C代码为:-

void array_processing(int * param); 

void main()
{
  int Client_ID[3][50];
  /* Some 
     Processing 
     which fills 
     this array */
    array_processing(&Client_ID[1]);
}
现在,当我想在C#中执行同样的操作时,如何传递这个数组? 函数定义如下所示:-

private void array_processing(ref int[] param);
和数组将声明为:-

int[,] Client_ID = new int[3,50];
现在,我如何将
客户机ID[1]
传递给函数
数组处理()

通过执行
array\u处理(ref Client\u ID[1])
将其称为“索引数错误”

只需声明方法

private void ParseArray(int[,] ar)
{
    // Some work...
}
  • UDP:代码格式

    • 你不能真的那样做。C#对其数组不太外向,并阻止您进行类似C的操作。这是一件好事

      您有多种选择:

    • 创建一个一维数组,并将二维行复制到该数组中
    • 使用一个锯齿状数组-一个数组数组,这更像是C语言让你做的
    • 具有一个数组\u处理重载,该重载接受一个2D数组和一个行号

    • 如果确实希望以1D数组的形式访问2D行,则应创建一个“RowProxy”类,该类将实现IList接口,并允许您仅访问一行:

      class RowProxy<T>: IList<T>
      {
          public RowProxy(T[,] source, int row)
          { 
             _source = source;
             _row = row;
          }
      
          public T this[int col]
          {
              get { return _source[_row, col]; } 
              set { _source[_row, col] = value; }
          }
      
          private T[,] _source;
          private int _row;
      
          // Implement the rest of the IList interface
      }
      
      您可以使用row_5_访问器作为函数,
      row_5_访问器(3)
      将为您提供
      ClientId[5,3]


    • 一种简单的方法是:

      var dimNumber = 1;
      
      int[] oneDimension = new int[50];
      
      for(var i=0; i<50; i++)
      {
         oneDimension[i] = Client_ID[dimNumber][i];
      }
      
      array_processing ( ref oneDimension);
      
      var-dimname=1;
      int[]一维=新的int[50];
      
      对于(var i=0;i,可以使用锯齿状数组

      // Initialize jagged array
      int[][] clientID = new int[3][];
      for (int i=0; i<clientId.Length; i++)
      {
         clientId[i] = new int[50];
      }
      
      array_processing(ref clientId[1]);
      

      您可以将数组声明为

      int[][] Client_ID = new[] { new int[50], new int[50], new int[50] };
      
      然后你可以把它传递给你的数组处理函数

      array_processing(ref Clinet_ID[1]);
      

      很抱歉,我的笔丢失了。

      对话晚了,但这里有一个锯齿状数组示例:

      string[][] rows = GetStringArray(values);
      string[] row = rows[0];
      
      您可以设置锯齿阵列,如下所示:

      // rowCount from runtime data
      stringArray = new string[rowCount][];
      
      for (int index = 0; index < rowCount; index++)
      {
          // columnCount from runtime data
          stringArray[index] = new string[columnCount];
      
          for (int index2 = 0; index2 < columnCount; index2++)
          {
              // value from runtime data
              stringArray[index][index2] = value;
          }
      }
      
      //运行时数据中的行数
      stringArray=新字符串[rowCount][];
      for(int index=0;index
      他想传递一维而不是所有的矩阵,但我只想在函数中处理一维!在这种情况下,我需要编写像私有void ParseArray(int[,]ar,int dimension),然后传递ParseArray(ref Client_ID,1)对不起,那是周五晚上:)这样的代码,对于像我这样的新手来说,这已经超出了我的大脑!!我会一个接一个地尝试。。。。但这让我很失望。。。它就是不能通过多维数组!C岩石!!:)不,不,您可以毫无问题地传递多维数组。将多维数组视为向量是不可能的。另一方面,C语言中的任何东西都不能给你我的建议4和5的灵活性!!谢谢你,伙计!!是的,第四和第五真的很好!再次感谢@zmbq:你说“这是件好事”。为什么?用这种方式限制语法有什么好处?不安全的代码可以绕过这个问题吗?C多维数组非常混乱。如果您有一个3x3矩阵:
      inta[3][3]
      ,那么[2]的类型是什么?首先,多维数组不能声明为这个,我尝试了相同的方法,但它给出的错误是“错误的索引数”。我在问题中提到了这一点。对不起,我已经更改了声明,您可以使用上面的符号
      string[][] rows = GetStringArray(values);
      string[] row = rows[0];
      
      // rowCount from runtime data
      stringArray = new string[rowCount][];
      
      for (int index = 0; index < rowCount; index++)
      {
          // columnCount from runtime data
          stringArray[index] = new string[columnCount];
      
          for (int index2 = 0; index2 < columnCount; index2++)
          {
              // value from runtime data
              stringArray[index][index2] = value;
          }
      }