从int[,]转换为double[]时c#出错 publicstaticdouble[]ConvertToDouble(int[,]arr,int r,int c) { double[]矩阵=新的double[r][c]; 对于(int i=0;i

从int[,]转换为double[]时c#出错 publicstaticdouble[]ConvertToDouble(int[,]arr,int r,int c) { double[]矩阵=新的double[r][c]; 对于(int i=0;i,c#,matrix,type-conversion,C#,Matrix,Type Conversion,,在使用矩阵之前,其元素必须初始化。您可以这样初始化元素: public static double[][] ConvertToDouble(int[,] arr , int r , int c) { double[][] matrix = new double[r][c]; for(int i=0;i<r;i++) { for(int j=0;j<c;j++) {

,在使用矩阵之前,其元素必须初始化。您可以这样初始化元素:

    public static double[][] ConvertToDouble(int[,] arr , int r , int c)
    {
        double[][] matrix = new double[r][c];
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                matrix[i][j] = Convert.ToDouble(arr[i,j]);  //the error comes in this line
            }
        }

        return matrix;
    }
double[][]矩阵=新的double[r][];
对于(int i=0;i
完整代码:

double[][] matrix = new double[r][];
for (int i = 0; i < r; i++) {
    matrix[i] = new double[c];
}
publicstaticdouble[]ConvertToDouble(int[,]arr,int r,int c){
双精度[]矩阵=新的双精度[r][];
对于(int i=0;i

请阅读此内容。

您必须分阶段初始化
双[][]
。我们可以通过只添加一行代码并更改另一行代码来完成此操作:

public static double[][] ConvertToDouble (int[, ] arr, int r, int c) {
            double[][] matrix = new double[r][];
            for (int i = 0; i < r; i++) {
                matrix[i] = new double[c];
            }

            for (int i = 0; i < r; i++) {
                for (int j = 0; j < c; j++) {
                    matrix[i][j] = Convert.ToDouble (arr[i, j]);
                }
            }

            return matrix;
        }

您正在将int的null数组传递给您的方法。这是否回答了您的问题?不,我确定数组不是null此代码无法编译,矩阵[]初始化不正确。这也是NRE的可能原因。Google“c#initialize jagged array”获得成功。您应该1.使用下一个代码初始化矩阵:
double[]矩阵=新的双精度[r][];
;2.然后在第一个for循环内(在第二个循环之前)初始化矩阵的每一行:
矩阵[i]=新的双精度[c];
。请参阅。
public static double[][] ConvertToDouble(int[,] arr , int r , int c)
{
    double[][] matrix = new double[r][];
    for(int i=0;i<r;i++)
    {
        matrix[i] = new double[c];
        for(int j=0;j<c;j++)
        {
            matrix[i][j] = Convert.ToDouble(arr[i,j]);  //the error comes in this line
        }
    }

    return matrix;
}
public static double[][] ConvertToDouble(int[,] arr)
{
    //GetUpperBound() returns the index of the last item, rather than the number of items
    var r = arr.GetUpperBound(0) + 1;
    var c = arr.GetUpperBound(1) + 1;

    double[][] matrix = new double[r][];
    for(int i=0;i<r;i++)
    {
        matrix[i] = new double[c];
        for(int j=0;j<c;j++)
        {
            matrix[i][j] = Convert.ToDouble(arr[i,j]);  //the error comes in this line
        }
    }

    return matrix;
}