2011-02-01 8 views

答えて

36

SelectManyは、トリックを行う必要があります。

var listOfArrays = new List<byte[]>(); 

byte[] array = listOfArrays 
       .SelectMany(a => a) 
       .ToArray(); 
+1

+1がOP以外のリストではなく、リスト RichK

+1

+1と同じ理由で+1 – BrokenGlass

4

List<T>.ToArray()を使用できます。

+0

うーん、downvoteを得ることができますか?リストアップ .ToArray()? –

+0

いいえ、おそらくOPが彼女/彼女の質問を修正したからです。我々は 'List 'について話している。 –

7
var myList = new List<byte>(); 
var myArray = myList.ToArray(); 

EDIT:OK、問題が判明、実際程度List<byte[]>だった - あなたは、単一のシーケンスに配列の配列を平らにするSelectManyを使用する必要があり、その場合には。 http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx

+0

*(参考)* [リスト。ToArray()](http://msdn.microsoft.com/en-us/library/x303t819.aspx) –

+0

OPは彼女/彼の質問を修正しました。 'リスト' –

0

var listOfArrays = new List<byte[]>(); 
var flattenedList = listOfArrays.SelectMany(bytes => bytes); 
var byteArray = flattenedList.ToArray(); 

ドキュメントあなたが実際のクラスSystem.Collections.Generic.List<byte>を使用している場合は、()てToArrayを呼び出します。新しいbyte[]を返します。

1

これはおそらく、少しずさんで、いくつかの最適化を使用しますが、あなたはそれの要点

var buffers = new List<byte[]>();  
int totalLength = buffers.Sum<byte[]>(buffer => buffer.Length);  
byte[] fullBuffer = new byte[totalLength]; 

int insertPosition = 0; 
foreach(byte[] buffer in buffers) 
{ 
    buffer.CopyTo(fullBuffer, insertPosition); 
    insertPosition += buffer.Length; 
} 
関連する問題