2013-01-04 10 views
114

Tôi có hai phiên bản IEnumerable<T> (với cùng số T). Tôi muốn có một ví dụ mới là IEnumerable<T> là sự kết nối của cả hai.Làm thế nào để nối hai IEnumerable <T> vào một IEnumerable mới <T>?

Có phương pháp tích hợp trong. Net để thực hiện việc đó hay tôi phải tự viết nó?

+9

Bạn có thể muốn đánh dấu trang http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b. –

+0

có liên quan, nếu nó giúp: [Cách thanh lịch để kết hợp nhiều bộ sưu tập phần tử?] (Http://stackoverflow.com/questions/4493858/elegant-way-to-combine-multiple-collections-of-elements) – nawfal

Trả lời

189

Vâng, LINQ to Objects hỗ trợ này với Enumerable.Concat:

var together = first.Concat(second); 
+0

Tôi luôn luôn quên tìm kiếm các phương pháp mở rộng, tx. –

+9

@SamuelRossille Cũng đừng quên rằng tên của các hành động bạn muốn thực hiện có khả năng đóng nếu không chính xác được gọi là những gì bạn đang sau. Luôn luôn duyệt IntelliSense, bạn học được rất nhiều. –

+2

Có tệ không khi làm thứ hai = first.Concat (thứ hai)? chúng ta sẽ có bất kỳ vấn đề tương tranh nào không? – user2934433

4

Bạn có thể sử dụng dưới mã cho giải pháp của bạn: -

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); 
    } 
} 
2
//The answare 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); 
} 
12

Phương pháp Concat sẽ trả về một đối tượng mà cụ IEnumerable<T> bằng cách trả về một đối tượng (gọi nó là Cat) mà điều tra viên sẽ cố gắng sử dụng hai mục được đếm qua (gọi cho họ là A và B) theo thứ tự. Nếu các số đếm được truyền vào đại diện cho các chuỗi sẽ không thay đổi trong suốt thời gian tồn tại của Cát và có thể đọc được mà không có tác dụng phụ, thì có thể sử dụng Mèo trực tiếp. Nếu không, bạn có thể gọi ToList() trên Cat và sử dụng kết quả List<T> (sẽ đại diện cho ảnh chụp nhanh nội dung của A và B).

Một số đếm được chụp nhanh khi điều tra 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à một số đếm được, thì bất kỳ thay đổi nào đối với B xảy ra trước khi Cat đến cuối A sẽ hiển thị trong liệt kê của Cát, nhưng những thay đổi xảy ra sau đó sẽ không xảy ra. Ngữ nghĩa như vậy có thể gây nhầm lẫn; chụp ảnh một con mèo có thể tránh được những vấn đề như vậy.