2011-02-01 13 views

Respuesta

36

SelectMany debe hacer el truco:

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

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

+1 por ser el único en notar que el OP tiene una lista en lugar de la lista RichK

+1

+1 por la misma razón – BrokenGlass

4

Puede usar List<T>.ToArray().

+0

Hmmm, un downvote? ¿Estoy inventando la lista .ToArray()? –

+0

No, pero quizás porque el OP ha solucionado su pregunta. Estamos hablando de 'List '. –

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

EDIT: Bueno, resulta que la cuestión era en realidad acerca de List<byte[]> - en cuyo caso es necesario utilizar SelectMany para aplanar una secuencia de secuencias en una sola secuencia.

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

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

+0

* (referencia) * [List .ToArray()] (http://msdn.microsoft.com/en-us/library/x303t819.aspx) –

+0

El OP ha solucionado su pregunta, estamos hablando de 'List '. –

0

Si está utilizando la clase real System.Collections.Generic.List<byte>, llame ToArray(). Devuelve un nuevo byte[].

1

Esto es probablemente un poco descuidado, podría utilizar un poco de optimización, pero se obtiene la esencia de la misma

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