Преобразовать возвращаемое значение LINQ в 2D Array - PullRequest
0 голосов
/ 12 октября 2018

Я работаю с двумя 2D-массивами, фактически:

MatrixAddition (int [] [] a, int [] [] b)

Добавление двух матрициспользуя LINQ и возвращая их в формат 2D-массива int[][].Результат LINQ в порядке, возвращен ожидаемый результат, но я не могу помочь себе вернуть их в формате int [] [].

MatrixAddition ()

 public static int[][] MatrixAddition(int[][] a, int[][] b)
 {
     return (int[][])a.Select((x, i) => x.Select((y, j) => a[i][j] + b[i][j]));
 }

Ошибка: System.InvalidCastException: 'Невозможно привести объект типа' d__5 2[System.Int32[],System.Collections.Generic.IEnumerable 1 [System.Int32]] 'для ввода' System.Int32 [] [] '.'

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы не можете напрямую привести перечислимое в 2-й зубчатый массив:

return Enumerable.Range(0, a.GetLength(0))
    .Select(i => Enumerable.Range(0, a.GetLength(1))
        .Select(j => a[i][j] + b[i][j])
        .ToArray()
    ).ToArray();
0 голосов
/ 12 октября 2018

Ваш текущий код, без приведения, возвращает перечислимые объекты, вложенные в другое перечислимое.Вам необходимо преобразовать как внутреннее перечислимое, так и внешнее перечислимое значение в int[] и удалить приведение:

return a.Select(
    (x, i) => x.Select((y, j) => a[i][j] + b[i][j]).ToArray()
).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...