EDIT: Tôi nghĩ rằng đây là những gì bạn muốn:
Nếu bạn không nhớ sắp xếp 'ra khỏi vị trí và giao lại danh sách, điều này sẽ làm việc:
collection = collection.GroupBy(item => item.GetType())
.SelectMany(g => g)
.ToList();
hoặc tùy thuộc vào bạn nhu cầu, một cái gì đó như:
collection = collection.OrderBy(item => item.GetType().FullName)
.ToList();
Nếu nó phải ở đúng vị trí, sau đó viết so sánh tùy chỉnh và list.Sort
có lẽ là lựa chọn tốt nhất.
Để nhóm các mặt hàng theo loại, bạn có thể sử dụng GroupBy
:
var groupedItems = collection.GroupBy(item => item.GetType());
này sử dụng thực hiện chậm.
Ngoài ra, bạn có thể đặt các 'nhóm' thành một cấu trúc dữ liệu như thế này:
var itemsByTypeLookUp = collection.ToLookup(item => item.GetType());
foreach(A a in itemsByTypeLookUp[typeof(A)])
{
...
}
Nếu bạn chỉ tìm kiếm một loại nhất định:
var itemsOfTypeA = collection.OfType<A>();
@Anthony: Có - không có kiểm tra ở đây cho null. Ngay bây giờ, bất cứ điều gì khác ngoài A hoặc B cũng sẽ được coi là B, ... –
Vâng, tôi đã xem xét nó, và hóa ra nó không * chính xác * những gì tôi sẽ đi xa vì không tính toán loại ' C: Base'. Tôi có thể làm 'a.GetType(). Name.CompareTo (b.GetType(). Name') (và bất kỳ kiểm tra null nào, chúng có liên quan không). Nhưng ai biết được, có lẽ chỉ có hai loại, và có lẽ 'A' thực sự là' Foo' và 'B' thực sự là' Bar' và 'Foo' nên đến trước 'Bar'. –
@Anthony: Có thực sự không đủ thông tin trong câu hỏi ban đầu để hoàn toàn xác định điều này - điều này cho phép bạn kiểm soát nhiều hơn về cách sắp xếp xảy ra, nhưng thật khó để biết OP thực sự muốn gì ... –