Tôi nhận được hành vi lạ bằng cách sử dụng hàm C# List.Sort dựng sẵn có trình so sánh tùy chỉnh.List.Sort in C#: so sánh được gọi với đối tượng null
Vì một số lý do, đôi khi nó gọi phương thức So sánh của lớp so sánh với đối tượng null là một trong các tham số. Nhưng nếu tôi kiểm tra danh sách với trình gỡ lỗi thì không có đối tượng null nào trong bộ sưu tập.
lớp Comparer của tôi trông như thế này:
public class DelegateToComparer<T> : IComparer<T>
{
private readonly Func<T,T,int> _comparer;
public int Compare(T x, T y)
{
return _comparer(x, y);
}
public DelegateToComparer(Func<T, T, int> comparer)
{
_comparer = comparer;
}
}
Điều này cho phép một đại biểu được truyền cho phương thức List.Sort, như thế này:
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
Vì vậy, các đại biểu trên sẽ ném một null ngoại lệ tham chiếu cho thông số x, mặc dù không có thành phần nào của danh sách của tôi là không.
CẬP NHẬT: Có Tôi hoàn toàn chắc chắn rằng đó là tham số x ném ngoại lệ tham chiếu null!
UPDATE: Thay vì sử dụng phương pháp List.Sort của khuôn khổ, tôi đã thử một phương pháp tùy chỉnh loại (ví dụ: mới sắp xếp nổi bọt() Sắp xếp (mylist).) Và các vấn đề đi đi. Như tôi nghi ngờ, phương thức List.Sort vượt qua null để so sánh vì một lý do nào đó.
Chỉnh sửa lại - Tôi không cho rằng bạn có bất kỳ thứ gì có thể tái sản xuất mà chúng tôi có thể xem? (btw, nếu đó là bạn - là một downvote thực sự bảo hành?) –
Đồng ý - một chương trình ngắn nhưng đầy đủ tái tạo vấn đề sẽ rất tiện dụng. Tôi rất nghi ngờ rằng đây là một lỗi trong List.Sort. –