我的几个覆盖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个月了!)
答案 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
似乎可以解决问题。之前从来没有需要这个....