将List<byte[]>转换为一个byte[]数组

12
我该如何将一个 `List` 转换成一个 `byte[]` 数组,或者一个 `Stream` 流?
5个回答

54

SelectMany应该可以解决问题:

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

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

3
+1 是因为你是唯一一个注意到 OP 有一个 List<byte[]> 而不是 List<byte> 的人。 - RichK

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();

这里有一篇关于it技术的文档,你可以在这里查看。


(参考) List<T>.ToArray() - Brad Christie
OP已经修复了他/她的问题,我们正在讨论List<byte[]> - Peter Lillevold

4

不是,但可能是因为原帖作者已经解决了他/她的问题。我们正在讨论“List<byte[]>”。 - Peter Lillevold

3

这可能有点粗糙,需要一些优化,但你能理解它的要点。

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

这可能比Peter Lillevold的答案更有效率(虽然我没有测试过) - youen

0
如果您正在使用实际类System.Collections.Generic.List<byte>,请调用ToArray()。它将返回一个新的byte[]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接