Как использовать LINQ для многомерного массива для "разматывания" массива?

Рассмотрим следующий массив:

int[,] numbers = new int[3, 2] { { 2, 1 }, { 3, 4 }, { 6, 5 } };

Я хотел бы использовать LINQ для построения IEnumerable с числами 2, 1, 3, 4, 6, 5.

Каким будет лучший способ сделать это?

Ответ 1

Как насчет:

Enumerable
    .Range(0,numbers.GetUpperBound(0)+1)
    .SelectMany(x => Enumerable.Range(0,numbers.GetUpperBound(1)+1)
    .Select (y =>numbers[x,y] ));

или аккуратно вверх.

var xLimit=Enumerable.Range(0,numbers.GetUpperBound(0)+1);
var yLimit=Enumerable.Range(0,numbers.GetUpperBound(1)+1);
var result = xLimit.SelectMany(x=> yLimit.Select(y => numbers[x,y]));

ИЗМЕНИТЬ ПЕРЕСМОТРЕННЫЙ ВОПРОС....

var result = array.SelectMany(x => x.C);

Ответ 2

Возможно, просто:

var all = numbers.Cast<int>();

Демо

Ответ 3

Используйте простой foreach для получения чисел из массива 2d:

int[,] numbers = new int[3, 2] { { 2, 1 }, { 3, 4 }, { 6, 5 } };
foreach(int x in numbers)
{
   // 2, 1, 3, 4, 6, 5.
}

LINQ (это большие накладные расходы, чтобы использовать Linq для вашей начальной задачи, потому что вместо простого итерационного массива будет создан CastIterator (ответ Тима) OfTypeIterator)

IEnumerable<int> query = numbers.OfType<int>();