2009-11-01 49 views
29

Tôi có một List<T> trong đó T là lớp hiển thị thuộc tính "Tên người dùng". Tên người dùng là loại tùy chỉnh đóng gói một chuỗi. Tôi thực hiện giao diện IComparable<T> vào loại phong tục này mà chỉ đơn giản trả vềKhông thể so sánh hai phần tử trong mảng

this.encapsulatedString.CompareTo(other.encapsulatedString) 

Tôi xác định một ICollectionView của Danh sách như sau:

AllUsers=CollectionViewSource.GetDefaultView(myList); 

Tôi đã thêm một Sortdescription:

AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending)); 

On line này mã ném ngoại lệ được nêu trong tiêu đề. Tôi có thể sắp xếp danh sách bằng các phương tiện khác mà không gặp vấn đề gì. Trường hợp ngoại lệ đến từ đâu?

Trả lời

46

Stupidstupidstupid: Các loại tùy chỉnh có để thực hiện IComparable cũng như IComparable<T> Có vẻ như SortDescription sử dụng phiên bản không-generic lỗi thời cũ của CompareTo

tôi sẽ nhận được một số giấc ngủ rất cần thiết ...

+0

Vui lòng đóng câu hỏi của bạn nếu bạn muốn ... – Noldorin

+37

KHÔNG, đừng đóng. Một người nào đó có thể gặp phải vấn đề tương tự – erikkallen

+4

+1 Đúng như tôi ... cảm ơn vì đã giữ nó mở. :-) –

0

Như bạn đã nói, bạn cần phải triển khai IComparable không chung chung. Bạn có thể sử dụng lớp Comparer <T> nếu bạn muốn triển khai giao diện này theo cách chung chung tốt đẹp :)

4

câu trả lời của bạn không hoàn toàn chính xác từ những gì tôi có thể nói. Đối tượng của tôi không thực hiện IComarable hoặc IComparable ở tất cả và họ vẫn làm việc tốt. Tôi đang tạo một CollectionViewSource và thêm các mô tả sắp xếp giống như bạn và không nhận được lỗi này. Tôi đã nhận được lỗi vì thuộc tính trong mô tả sắp xếp trống. Một khi tôi cố định tất cả mọi thứ này làm việc tốt mà không có giao diện. Tôi nghi ngờ có thể bạn đã có một tài sản không chính xác và nó giảm xuống để sử dụng IComparable nếu nó không thể truy cập tài sản.

5

Trong trường hợp của tôi, tôi đã thêm một khối try/catch bên trong chức năng So sánh và hiển thị thông báo ngoại lệ cho bảng điều khiển. Nếu có lỗi trong hàm so sánh của bạn, bạn sẽ nhận được ngoại lệ phụ này ("Không thể so sánh hai phần tử ...").

Vấn đề của tôi là cụ thể với việc lập chỉ mục vị trí 3 của chuỗi đã bị "" gây ra do lỗi khác.

+1

Đối với tôi điều này cũng được gây ra bởi một ngoại lệ bên trong chức năng So sánh. –

0

Trong trường hợp của tôi, thuộc tính đang được sắp xếp là object và lỗi xảy ra khi một số đối tượng là int s và các đối tượng khác là string s.

tôi có thể đã thực hiện IComparable, nhưng việc sử dụng các lớp học đã được thực sự nhiều chuỗi hướng - tôi đã có thể thay đổi object-string, và chắc chắn rằng tất cả các setters sử dụng số gọi .ToString(), và nó đã được tất cả các thiết lập từ đó .

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