ошибка в c# при преобразовании из int [,] в double [] [] - PullRequest
0 голосов
/ 14 марта 2020
    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;
    }

Я пытаюсь создать функцию, которая преобразует int [,] в double [] [], и я получил исключение System.NullReferenceException

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вы должны инициализировать double[][] поэтапно. Мы можем сделать это, добавив только одну строку кода и изменив одну другую:

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

Мы также можем упростить вызов метода, выведя r и c:

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;
}
0 голосов
/ 14 марта 2020

Прежде чем вы сможете использовать матрицу, ее элементы должны быть инициализированы . Вы можете инициализировать элементы следующим образом:

double[][] matrix = new double[r][];
for (int i = 0; i < r; i++) {
    matrix[i] = new double[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 i = 0; i < r; i++) {
                for (int j = 0; j < c; j++) {
                    matrix[i][j] = Convert.ToDouble (arr[i, j]);
                }
            }

            return matrix;
        }

Пожалуйста, прочтите это Официальная документация Microsoft .

...