2016-10-27 6 views
2

Ich muss mehrere Arrays zu einem kombinieren. Ich habe festgestellt, dass ein guter Weg zu sein scheint, dies zu tun:Wie IEnumerable in Byte-Array konvertieren

IEnumerable<byte> Combine(byte[] a1, byte[] a2, byte[] a3) 
{ 
    foreach (byte b in a1) 
     yield return b; 
    foreach (byte b in a2) 
     yield return b; 
    foreach (byte b in a3) 
     yield return b; 
} 

Aber ich bin nicht gut vertraut mit IEnumerable. Wie kann ich das Ergebnis zurück in byte[] konvertieren, damit ich weiter damit arbeiten kann?

Vielen Dank.

+1

'myEnumerable.ToArray()'? Oder habe ich falsch verstanden was du willst? – MAV

+0

Gibt es einen bestimmten Grund, warum Sie ein Array möchten? –

Antwort

3

Statt sie iterieren nur Linq des .Concat:

var joint = a1.Concat(a2).Concat(a3); 

Wenn Sie es als ein Array zurückgeben möchten:

joint.ToArray(); 
+1

Danke, das funktioniert gut. – Peter

+0

@Peter - Sie sind willkommen :) –

2

ich es so schreiben würde:

IEnumerable<T> Combine<T>(params IEnumerable<T>[] stuff) 
{ 
    return stuff.SelectMany(a => a); 
} 

Und zu einem einzigen Array wie folgt zusammenführen:

var a = new byte[] { 0, 1, 2 }; 
var b = new byte[] { 0, 1, 2 }; 
var c = new List<byte> { 0, 1, 2 }; 

var merged = Combine(a, b, c).ToArray(); 

Beachten Sie den Joker im Deck - keine Einschränkung der Eingabe auf Arrays. Jedes Array T[] ist ein IEnumerable<T>, aber auch viele andere Dinge.

+0

Dies ist eine bessere Möglichkeit, die gesamte Funktion zu schreiben :) –

+1

@GiladGreen Danke. –

Verwandte Themen