2011-02-01 4 views

ответ

36

SelectMany должен сделать трюк:

var listOfArrays = new List<byte[]>(); 

byte[] array = listOfArrays 
       .SelectMany(a => a) 
       .ToArray(); 
+1

+1 для того, чтобы быть единственным, кто заметил, что у ОП есть Список , а не Список RichK

+1

+1 по той же причине – BrokenGlass

4

Вы можете использовать List<T>.ToArray().

+0

Хммм, downvote? Я составляю список .ToArray()? –

+0

Нет, но, возможно, потому, что ОП установил свой вопрос. Мы говорим о 'List '. –

7
var myList = new List<byte>(); 
var myArray = myList.ToArray(); 

EDIT: Хорошо, оказывается, вопрос был на самом деле о List<byte[]> - в этом случае вы должны использовать SelectMany выравниваться последовательность последовательностей в одну последовательность.

var listOfArrays = new List<byte[]>(); 
var flattenedList = listOfArrays.SelectMany(bytes => bytes); 
var byteArray = flattenedList.ToArray(); 

Docs в http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx

+0

* (ссылка) * [Список .ToArray()] (http://msdn.microsoft.com/en-us/library/x303t819.aspx) –

+0

ОП установил свой вопрос, мы говорим о 'Список '. –

0

Если вы используете фактический класс System.Collections.Generic.List<byte>, вызовите ToArray(). Он возвращает новый byte[].

1

Это, вероятно, немного неаккуратно, может использовать некоторую оптимизацию, но вы получите суть его

var buffers = new List<byte[]>();  
int totalLength = buffers.Sum<byte[]>(buffer => buffer.Length);  
byte[] fullBuffer = new byte[totalLength]; 

int insertPosition = 0; 
foreach(byte[] buffer in buffers) 
{ 
    buffer.CopyTo(fullBuffer, insertPosition); 
    insertPosition += buffer.Length; 
} 
Смежные вопросы