IEnumerable<T>
(와 같은 T
) 의 두 인스턴스가 있습니다. 나는 새로운 인스턴스 IEnumerable<T>
가 둘 모두를 연결 하고 싶어 합니다.
.Net에 내장 메소드가 있습니까? 아니면 직접 작성해야합니까?
답변
예, LINQ to Objects는 다음을 통해이를 지원합니다 Enumerable.Concat
.
var together = first.Concat(second);
NB :한다 first
또는 second
당신이를받을 null의 경우 ArgumentNullException
. 이것을 피하고 null을 빈 세트처럼 취급하려면 null 병합 연산자를 다음과 같이 사용하십시오.
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
답변
이 Concat
메소드는 IEnumerable<T>
열거자가 두 개의 전달 된 열거 가능 항목 (A 및 B라고 함)을 순서대로 사용하려고 시도하는 오브젝트 (Cat)를 리턴하여 구현하는 오브젝트를 리턴합니다. 전달 된 열거 가능 항목이 Cat의 수명 동안 변경되지 않고 부작용없이 읽을 수있는 시퀀스를 나타내는 경우 Cat을 직접 사용할 수 있습니다. 그렇지 않으면 결과 를 호출 ToList()
하여 Cat
사용 하는 것이 좋습니다 List<T>
(A와 B의 내용의 스냅 샷을 나타냄).
일부 열거 가능 항목은 열거가 시작될 때 스냅 샷을 작성하고 열거 중 콜렉션이 수정되면 해당 스냅 샷에서 데이터를 리턴합니다. B가 그러한 열거 가능한 경우, Cat이 A의 끝에 도달하기 전에 발생하는 B에 대한 변경 사항은 Cat의 열거에 표시되지만 그 이후에 발생하는 변경 사항은 적용되지 않습니다. 이러한 의미는 혼동 될 수 있습니다. Cat의 스냅 샷을 찍으면 이러한 문제를 피할 수 있습니다.
답변
솔루션에 아래 코드를 사용할 수 있습니다.
public void Linq94()
{
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB);
Console.WriteLine("All numbers from both arrays:");
foreach (var n in allNumbers)
{
Console.WriteLine(n);
}
}
답변
// The answer that I was looking for when searching
public void Answer()
{
IEnumerable<YourClass> first = this.GetFirstIEnumerableList();
// Assign to empty list so we can use later
IEnumerable<YourClass> second = new List<YourClass>();
if (IwantToUseSecondList)
{
second = this.GetSecondIEnumerableList();
}
IEnumerable<SchemapassgruppData> concatedList = first.Concat(second);
}