将List <byte []>转换为一个byte [] array </byte []>

时间:2011-02-01 21:25:34

标签: c# .net

如何在一个List<byte[]>数组或一个byte[]中转换Stream

5 个答案:

答案 0 :(得分:42)

SelectMany应该这样做:

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

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

答案 1 :(得分:7)

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

编辑:好的,事实证明问题实际上是关于List<byte[]> - 在这种情况下,您需要使用SelectMany将序列序列展平为单个序列。

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

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

的文档

答案 2 :(得分:4)

您可以使用List<T>.ToArray()

答案 3 :(得分:2)

这可能有点草率,可以使用一些优化,但你得到它的要点

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

答案 4 :(得分:0)

如果您使用的是实际的班级System.Collections.Generic.List<byte>,请调用ToArray()。它返回一个新的byte[]