帮助,为什么我的Equals方法已经开始提供无效的Cast Exceptions?

时间:2010-03-05 17:00:29

标签: .net vb.net

我的几个覆盖Equals方法已经开始抛出Invalid Cast Exceptions -

  

无法将类型为“System.DBNull”的对象强制转换为类型Common.ResolveUser'。

将List(of T)(在本例中为T的类型为ResolveUser)绑定到组合时会发生这种情况。

等于方法:

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Dim i As ResolveUser = CType(obj, ResolveUser)
        If i.UniqueResolveID = UniqueResolveID Then Return True
    End Function

组合框装订:

 Me.cboPreventativeActionOwner.DataSource = CurrentUser.LoadAllTechniciansAndGreater
 Me.cboPreventativeActionOwner.ValueMember = "ID"
 Me.cboPreventativeActionOwner.DisplayMember = "FullName"

为集合中的每个项目正确填充ValueMember和FullName属性。

这一切都很好(大约有6个月了!)

2 个答案:

答案 0 :(得分:4)

从例外情况来看,这听起来就像是从数据库中提取数据。

在这种情况下,您必须拥有一个设置为NULL的记录,这会导致“obj”参数设置为System.DBNull而不是“Common.ResolveUser”实例。发生这种情况时,CType失败,抛出InvalidCastException。

答案 1 :(得分:0)

将等于改为:

   Public Overrides Function Equals(ByVal obj As Object) As Boolean
        If Not obj Is DBNull.Value And Not obj Is Nothing Then
            Dim i As ResolveUser = CType(obj, ResolveUser)
            If i.UniqueResolveID = UniqueResolveID Then Return True
        End If
    End Function

似乎可以解决问题。之前从来没有需要这个....