2017-07-27 122 views
-1

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

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

回答

5

您不需要Combine方法。只需使用SelectMany

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<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 
+0

没有运气!返回相同的结果。 – ARC

+0

我刚刚试用过一个样品(请参阅我的编辑),它按预期工作。代码中必须有其他事情发生 –