我有一个自定义对象类型列表
Dim a As New List(Of CustomType)
填充实例。我有一个继承
的比较器类Public Class CustomTypeComparer
Implements IComparer(Of CustomType)
Public Function Compare(x As CustomType, y As CustomType) As Integer Implements IComparer(Of CustomType).Compare
...
End Function
End Class
使用
调用a.Sort(New CustomTypeComparer)
方法。比较器的唯一方法Compare()
是自动调用的,但偶尔会失败,因为x
未定义或'未设置为对象的实例'。
我已经搜索了正在排序的列表以检查没有任何元素是Nothing,通过a.Contains(Nothing)
上的手表确认返回False
并使用查看对象其他部分的其他比较器进行检查,这些都没有列表中的问题,只有这一个。
我怎样才能更深入地研究这个问题?人们可以就此问题给出任何见解吗?
更新
读取框架的参考源代码,列表排序方法使用基础Array.Sort()
方法。从中获取提示并尝试在列表中使用List.TrimExcess()
方法,这已经改变了行为,并且没有Nothing
被传递给IComparer。一位评论者发现IComparers需要比较空值,它与Array的底层边界相比大于数组,并且静默地在其中包含Nothing
来生成预期的功能。
答案 0 :(得分:0)
如果您只是在寻找调试帮助,请像这样启动CustomTypeComparer
Public Class CustomTypeComparer
Implements IComparer(Of CustomType)
Public Function Compare(x As CustomType, y As CustomType) As Integer Implements IComparer(Of CustomType).Compare
If x Is Nothing Then
Stop
ElseIf y Is Nothing Then
Stop