Вот многоразовой реализация
public static class Utils
{
public static List<T[]> To1DArrayList<T>(this T[,] source)
{
if (source == null) throw new ArgumentNullException("source");
int rowCount = source.GetLength(0), colCount = source.GetLength(1);
var list = new List<T[]>(rowCount);
for (int row = 0; row < rowCount; row++)
{
var data = new T[colCount];
for (int col = 0; col < data.Length; col++)
data[col] = source[row, col];
list.Add(data);
}
return list;
}
}
и образец использования
var source = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
var result = source.To1DArrayList();
Некоторые комментарии к другим ответам.
M.kazem Akhgary: Если мне нужно список, я не понимаю, почему я должен сначала создать зазубренный массив и обращенного его в список вместо создания списка непосредственно.
Eser: Мне обычно нравятся его элегантные решения Linq, но это определенно не один из них. Если идея состоит в том, чтобы использовать Linq (хотя я твердо верю, что это не предназначено для этого), следующее будет более подходящим:
var source = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
var result = Enumerable.Range(0, source.GetLength(0))
.Select(row => Enumerable.Range(0, source.GetLength(1))
.Select(col => source[row, col]).ToArray())
.ToList();
Ключевое слово для этого - «сгладить» для поиска в Интернете. – BananaAcid
@BananaAcid, но OP не хочу 'Список' он хочет 'Список ' –
Grundy
@Grundy: правильно, но как «плоский» он должен быть - я считаю, пример кода можно отрегулировать. Подобно приведенному ниже примеру LINQ, он просто берет первый «уровень». – BananaAcid