Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 合并多字节数组#_C#_Arrays_Array Merge - Fatal编程技术网

C# 合并多字节数组#

C# 合并多字节数组#,c#,arrays,array-merge,C#,Arrays,Array Merge,我想合并多个字节数组,但失败。最后一个数组仅显示最后添加的字节数组,而不是所有字节数组。以下是我的尝试 List<byte[]> d = new List<byte[]>(); foreach (var item in IDs) { obj = RequisitionsObj.GenerateLabOrderReq(); if (obj.Data != null) { d.Add(obj.Data);

我想合并多个字节数组,但失败。最后一个数组仅显示最后添加的字节数组,而不是所有字节数组。以下是我的尝试

List<byte[]> d = new List<byte[]>();
foreach (var item in IDs)
{       
    obj = RequisitionsObj.GenerateLabOrderReq();

    if (obj.Data != null)
    {    
        d.Add(obj.Data);              
    }     
}

byte[] final = Combine(d.SelectMany(a => a).ToArray());

private byte[] Combine(params byte[][] arrays)
{
    byte[] rv = new byte[arrays.Sum(a => a.Length)];
    int offset = 0;

    foreach (byte[] array in arrays)
    {
        System.Buffer.BlockCopy(array, 0, rv, offset, array.Length);
        offset += array.Length;
    }

    return rv;
}
List d=新列表();
foreach(ID中的变量项)
{       
obj=RequisitionsObj.GenerateLabOrderReq();
如果(对象数据!=null)
{    
d、 添加(对象数据);
}     
}
byte[]final=Combine(d.SelectMany(a=>a.ToArray());
专用字节[]组合(参数字节[][]数组)
{
byte[]rv=新字节[arrays.Sum(a=>a.Length)];
整数偏移=0;
foreach(数组中的字节[]数组)
{
系统缓冲区块拷贝(数组,0,rv,偏移量,数组长度);
偏移量+=数组长度;
}
返回rv;
}

您不需要使用
合并方法。只需使用
选择多个

List<byte[]> d = new List<byte[]>();
foreach (var item in IDs)
{ 
    obj = RequisitionsObj.GenerateLabOrderReq();
    if (obj.Data != null)
    {    
        d.Add(obj.Data);
    }

}

byte[] final = d.SelectMany(a => a).ToArray();
List d=新列表();
foreach(ID中的变量项)
{ 
obj=RequisitionsObj.GenerateLabOrderReq();
如果(对象数据!=null)
{    
d、 添加(对象数据);
}
}
字节[]final=d.SelectMany(a=>a).ToArray();
编辑

工作样本:

List<byte[]> d = new List<byte[]>();
byte[] b1 = new byte[] { 1, 2, 3, 4 };
byte[] b2 = new byte[] { 5, 6, 7, 8 };
d.Add(b1);
d.Add(b2);
byte[] b3 = d.SelectMany(a => a).ToArray(); // Content is 1,2,3,4,5,6,7,8
List d=新列表();
字节[]b1=新字节[]{1,2,3,4};
字节[]b2=新字节[]{5,6,7,8};
d、 添加(b1);
d、 添加(b2);
字节[]b3=d.SelectMany(a=>a).ToArray();//含量为1,2,3,4,5,6,7,8

我刚刚用一个示例进行了尝试(请参见我的编辑),结果一切正常。您的代码中一定发生了其他事情