2017-07-27 1 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(); 

EDIT

ワーキングサンプル:

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

サンプルを使って試しました(私の編集を見てください)、期待どおりに動作しました。あなたのコードで何か他のことが起こっているに違いありません –

関連する問題