2017-07-27 167 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

我剛剛試用過一個樣品(請參閱我的編輯),它按預期工作。代碼中必須有其他事情發生 –