2013-01-09 35 views
15

Tôi có một List<Person> và thay vào đó muốn chuyển đổi chúng để chế biến đơn giản để một List<string>, cách làm như sau:Liệu LINQ to Objects giữ gìn trật tự của nó

List<Person> persons = GetPersonsBySeatOrder(); 
List<string> seatNames = persons.Select(x => x.Name).ToList(); 

Console.WriteLine("First in line: {0}", seatNames[0]); 

là báo cáo kết quả .Select() trên LINQ to Objects đối tượng đảm bảo để không thay đổi thứ tự của các thành viên trong danh sách? Giả sử không có phân biệt rõ ràng/nhóm/đặt hàng nào được thêm

Ngoài ra, nếu mệnh đề .Where() tùy ý được sử dụng trước tiên, nó vẫn được đảm bảo giữ thứ tự tương đối hoặc đôi khi sử dụng lọc không lặp?


Như Fermin đã nhận xét ở trên, đây thực chất là câu hỏi trùng lặp. Tôi đã thất bại về cách chọn từ khóa đúng để tìm kiếm stackoverflow

Preserving order with LINQ

+5

Chi tiết tốt về truy vấn LINQ và đặt hàng tại đây: http://stackoverflow.com/questions/204505/preserving-order-with-linq – Fermin

Trả lời

3

Thực hiện Net hiện nay nó sử dụng mã như vậy. Nhưng không có gì đảm bảo rằng việc triển khai này sẽ diễn ra trong tương lai.

private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector) 
{ 
    int index = -1; 
    foreach (TSource source1 in source) 
    { 
    checked { ++index; } 
    yield return selector(source1, index); 
    } 
} 
+2

Tôi nghi ngờ rằng việc triển khai nội bộ của phương thức được sử dụng rộng rãi như .Select() sẽ được thay đổi để trả về các đối tượng theo một thứ tự khác. – Fermin

+1

Hàng cơ sở dữ liệu không có thứ tự được bảo đảm. Danh sách làm. Nó phải hoàn toàn phụ thuộc vào loại bộ sưu tập cơ bản (tức là loại bộ sưu tập cơ bản * điều tra *), và thứ tự danh sách cần được bảo toàn, bảo đảm. Chọn sẽ sử dụng điều tra kiểu của Danh sách, và hiện tại nó vẫn giữ nguyên thứ tự, được bảo đảm. – Triynko

2

Tùy thuộc vào loại bộ sưu tập cơ bản hơn bất kỳ thứ gì. Bạn có thể nhận được thứ tự không nhất quán từ một HashSet, nhưng một Danh sách là an toàn. Ngay cả khi thứ tự bạn muốn được cung cấp ngầm, thì tốt hơn là xác định thứ tự rõ ràng nếu bạn cần nó. Có vẻ như bạn đang thực hiện việc đánh giá bằng tên phương thức.

Các vấn đề liên quan