【问题标题】:I got this error: Error 1: Cannot implicitly convert type 'double[][]' to 'double[]'我收到此错误:错误 1:无法将类型 'double[][]' 隐式转换为 'double[]'
【发布时间】:2011-06-13 22:28:17
【问题描述】:

我得到了这个代码:

double[][] ou = new double[h][w];

for(i=0;i<h;i++)
   for(int j=0;j<w;j++)
      ou[i][j] = sortie[z++];

return ou;  

我得到这 2 个错误:

Error 1: Cannot implicitly convert type 'double[][]' to 'double[]'

简称“退欧”

Error 2: Invalid rank specifier: expected ',' or ']'

指“double[][] ou = new double[h][w];”

编辑: 我尝试将代码从 Java 转换为 C#,那就是我有 "double[][] ou = new double[h][w];"

【问题讨论】:

  • 这个函数的签名是什么样的?相反,你想用它做什么?我假设函数看起来像这样:double[] myFunction(...)。也就是说,它应该返回一个一维数组,而您返回的是二维的ou
  • 很抱歉听到这个消息。您有什么问题,还是只是告诉我们编译器有多聪明?
  • C# 会做new double[h][w] 吗?在其他语言中,您应该像new double[][3](或new double[3][])一样,然后自己创建每个子数组。
  • Sapph,你是对的...我的函数是 double[][] myFunction(...)...错误已解决

标签: c# multidimensional-array


【解决方案1】:

您要创建的是一个多维数组,但正在创建一个锯齿状数组,它是一个数组数组。看看这个 SO question 的区别。

Multidimentional Arrays and Jagged Array

所以在第一行本身你不能用new double[h][w] 创建一个数组,这是不允许的

你需要像这样创建数组

double[,] array = new double [h,w];

并访问这样的元素

array[i,j] = somevalue;

【讨论】:

    【解决方案2】:

    试试这个:

    double[,] ou = new double[h,w];
    for(i=0;i<h;i++)
           for(int j=0;j<w;j++)
              ou[i,j] = sortie[z++];
    
    return ou;  
    

    多维数组的语法在维度之间使用逗号,而不是双括号。

    【讨论】: