我有一些比较函数的相当简单的代码
Public Overridable Function Comparer(thisValue As Object, otherValue As Object) As Integer
Try
If thisValue Is Nothing Then
If otherValue Is Nothing Then
Return 0
Else
Return -1
End If
Else
If otherValue Is Nothing Then
Return 1
Else
Return thisValue.ToString.CompareTo(otherValue.ToString)
End If
End If
Catch ex As Exception
Return 0
End Try
End Function
try-catch 块的原因是:如果 thisValue 为 Nothing,我会在实际比较行得到 NullReferenceException。调试器向我显示 thisValue 是“Nothing”,但无论如何都会落在 ELSE 分支中。
谁能告诉我为什么?
更新:我试图通过插入另一个无检查来修改这种情况。在我的场景中,这归结为几百个异常,执行速度是可以忍受的。不想想象有人试图对空列进行排序。
http://i.stack.imgur.com/8dnXD.png
这怎么可能?是否还有另一个我不知道的虚无“级别”。我需要检查 thisValue 和 otherValue 的类型吗?
函数永远不会被覆盖。我尝试删除“可覆盖”无效。