2016-10-27 2 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

@ 피터 - 당신은 환영합니다 :) –

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 감사합니다. –

관련 문제