2016-10-27 6 views
2

Мне нужно объединить несколько массивов в один. Я обнаружил, что, кажется, хороший способ сделать это:Как преобразовать IEnumerable в байтовый массив

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

Однако, я не очень хорошо знаком с IEnumerable. Как преобразовать результат обратно в byte[], чтобы я мог продолжить работу с ним?

спасибо.

+1

'myEnumerable.ToArray()'? Или я неправильно понял, что вы хотите? – MAV

+0

Любая конкретная причина, по которой вам нужен массив? –

ответ

3

Вместо переборе их просто LINQ-х .Concat:

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

Если вы хотите, чтобы вернуть его как массив:

joint.ToArray(); 
+1

Спасибо, это отлично работает. – Peter

+0

@Peter - приветствую :) –

2

Я пишу это так:

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

И слияние с одним массивом:

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(); 

Обратите внимание на джокер в колоде - нет необходимости ограничивать ввод в массивы. Любой массив T[] - это IEnumerable<T>, но так много других вещей.

+0

Это лучший способ написать всю функцию :) –

+1

@GiladGreen Спасибо. –