C# - 我可以使用数组初始化程序构建一个字节数组吗?

8bi*_*dge 3 c# byte bytearray array-initialization

我想使用数组初始化程序从另一个字节数组中构建一个字节数组,以及构成标题/尾部的其他一些字节.基本上,我想做这样的事情:

byte[] DecorateByteArray(byte[] payload)
{
    return new byte[] { 0, 1, 2, payload.GetBytes(), 3, 4, 5};
}
Run Code Online (Sandbox Code Playgroud)

GetBytes() 不幸的是,上面是虚构的.

这有什么好的/优雅的方式吗?我通过使用a BinaryWriter将所有内容写入a MemoryStream,然后将其转换为字节数组来解决这个问题MemoryStream.ToArray(),但它感觉有点笨重.

Jon*_*eet 6

你可以得到的最接近的是:

byte[] DecorateByteArray(byte[] payload) =>
    new byte[] { 0, 1, 2 } 
       .Concat(payload)
       .Concat(new byte[] { 3, 4, 5 })
       .ToArray();
Run Code Online (Sandbox Code Playgroud)

那将是非常低效的.你最好做以下事情:

static T[] ConcatArrays<T>(params T[][] arrays)
{
    int length = arrays.Sum(a => a.Length);
    T[] ret = new T[length];
    int offset = 0;
    foreach (T[] array in arrays)
    {
        Array.Copy(array, 0, ret, offset, array.Length);
        offset += array.Length;
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

(Buffer.BlockCopy在适当的情况下也考虑使用.)

然后用:

var array = ConcatArrays(new byte[] { 0, 1, 2 }, payload, new byte[] { 3, 4, 5 });
Run Code Online (Sandbox Code Playgroud)