Tôi khuyên bạn nên mở rộng lớp Comparer<T>
thay vì triển khai giao diện IComparer<T>
, cũng như Microsoft (xem tham khảo đầu tiên bên dưới).
Bây giờ, nếu bạn muốn chính đối tượng của mình (bất kể T là gì) để có thể so sánh với chính nó, nó có thể thực hiện giao diện IComparable
(xem tham chiếu thứ hai bên dưới).
Từ: http://msdn.microsoft.com/en-us/library/8ehhxeaf(v=vs.110).aspx (IComparer<T>
)
Chúng tôi khuyên bạn nên xuất phát từ lớp Comparer<T>
thay vì thực hiện các giao diện IComparer, bởi vì lớp Comparer<T>
cung cấp một thực hiện giao diện rõ ràng của IComparer.Compare
phương pháp và Default
thuộc tính được so sánh mặc định cho đối tượng.
Từ: http://msdn.microsoft.com/en-us/library/cfttsh47(v=vs.110).aspx (Comparer<T>
)
bắt nguồn từ lớp học này nhằm cung cấp một cài đặt tùy chỉnh giao diện IComparer<T>
để sử dụng với các lớp học tập như SortedList<TKey, TValue>
và SortedDictionary<TKey, TValue>
lớp generic. Sự khác biệt giữa phát sinh từ các lớp Comparer và thực hiện các giao diện System.IComparable
là như sau:
- Để xác định như thế nào hai đối tượng nên được so sánh theo mặc định, thực hiện các giao diện
System.IComparable
trong lớp học của bạn. Điều này đảm bảo rằng các hoạt động sắp xếp sẽ sử dụng mã so sánh mặc định mà bạn đã cung cấp.
- Để xác định trình so sánh để sử dụng thay vì trình so sánh mặc định, lấy được từ lớp Comparer. Sau đó, bạn có thể sử dụng trình so sánh này trong các phép toán sắp xếp để so sánh như một tham số.
Nguồn
2014-11-02 11:00:47
triển khai 'IComparer' – mihai
tôi nghĩ rằng việc triển khai' IComparer' là cách tốt hơn, vì nó có thể được sử dụng sau trong LINQ. – W92
Thừa kế từ so sánh. Msdn nói với bạn tại sao. Bằng cách đó bạn sẽ có được mặc định.so sánh hành vi –