将数组的一部分复制到List中的快速方法?

bil*_*lpg 1 .net c# memory arrays performance

C#的List <>有一组CopyTo函数,它们使用快速内存​​块拷贝将其内部数组的内容提取到另一个数组中.

有没有办法反过来做到这一点?它可能看起来像......

var buffer = new List<byte>();
buffer.AddRange(afewbytes);
buffer.AddFromArray(myArray, startIndex, countBytesToCopy);
buffer.AddRange(afewmorebytes);
Run Code Online (Sandbox Code Playgroud)

由于我的List是List <byte>变种,我宁愿避免一个逐字节复制的循环.

Jon*_*eet 6

List<T>(IEnumerable<T>)构造函数将使用ICollection<T>.CopyTo如果集合工具ICollection<T>,它byte[]会做.

如果您只想提取部分数组,那么这不会直接帮助,但您可以创建自己的ByteArraySegmentICollection<byte>,CopyTo使用Buffer.BlockCopy或者以下任何方式实现和实现操作:

public class ByteArraySegment : ICollection<byte>
{ 
    private readonly byte[] array;
    private readonly int start;
    private readonly int count;

    public ByteArraySegment(...)
    {
        // Obvious code
    }

    public void CopyTo(byte[] target, int index)
    { 
        Buffer.BlockCopy(array, start, target, index, count);
    }

    // Other ICollection<T> members
}
Run Code Online (Sandbox Code Playgroud)

然后:

List<byte> bytes = new List<byte>(new ByteArraySegment(myArray, start, count));
Run Code Online (Sandbox Code Playgroud)

(或使用AddRange具有相同优化的.)