Tôi có hai trường hợp IEnumerable<T>
(với giống nhau T
). Tôi muốn một ví dụ mới IEnumerable<T>
là sự kết hợp của cả hai.
Có một phương thức tích hợp trong .Net để làm điều đó hay tôi phải tự viết nó?
Tôi có hai trường hợp IEnumerable<T>
(với giống nhau T
). Tôi muốn một ví dụ mới IEnumerable<T>
là sự kết hợp của cả hai.
Có một phương thức tích hợp trong .Net để làm điều đó hay tôi phải tự viết nó?
Câu trả lời:
Có, LINQ to Object hỗ trợ điều này với Enumerable.Concat
:
var together = first.Concat(second);
NB: Nên first
hoặc second
là null bạn sẽ nhận được a ArgumentNullException
. Để tránh điều này và xử lý null như bạn sẽ làm một tập hợp trống, hãy sử dụng toán tử hợp nhất null như vậy:
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
using System.Linq
không gian tên ở đầu tệp mã để xem phương thức mở rộng mong muốn trong intellisense IDE.
Các Concat
phương pháp sẽ trả về một đối tượng mà cụ IEnumerable<T>
bằng cách trả lại một đối tượng (gọi nó là Cát) mà điều tra viên sẽ cố gắng sử dụng hai thông qua trong mục đếm được (gọi họ là A và B) theo thứ tự. Nếu các liệt kê được truyền vào biểu thị các chuỗi sẽ không thay đổi trong suốt vòng đời của Cat và có thể được đọc từ mà không có tác dụng phụ, thì Cat có thể được sử dụng trực tiếp. Nếu không, nó có thể là một ý tưởng tốt để gọi ToList()
về Cat
và sử dụng kết quả List<T>
(mà sẽ đại diện cho một bản chụp của các nội dung của A và B).
Một số liệt kê chụp ảnh nhanh khi liệt kê bắt đầu và sẽ trả về dữ liệu từ ảnh chụp nhanh đó nếu bộ sưu tập được sửa đổi trong quá trình liệt kê. Nếu B là vô số, thì bất kỳ thay đổi nào đối với B xảy ra trước khi Cat đến cuối A sẽ xuất hiện trong bảng liệt kê của Cat, nhưng những thay đổi xảy ra sau đó sẽ không xảy ra. Ngữ nghĩa như vậy có thể có thể gây nhầm lẫn; chụp ảnh nhanh của Cat có thể tránh được những vấn đề như vậy.
Bạn có thể sử dụng mã dưới đây cho giải pháp của mình: -
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);
}