这是一个非常奇怪的问题,你可能会发现它是。我正在做一个巨大的 VB6 到 VB.NET 2010 的迁移项目。作为 VB6 的一部分,我们有一个常量定义为 NullString = "" 在 .NET 中,它也在类似的行上迁移并使用。我们遇到的问题是,当将 RecordSet 中的值(它只是 DataTable 的包装器)与这个 NullString 进行比较时,我们会得到比较错误。由于该项目正在积极开发中,我们必须依赖迁移工具(VB MIgration Partner),它了解很少的 Pragma 但不太先进。我创建了一个类(NullStringClass)并重载了“=”和“<>”运算符,它对我的比较问题进行了排序。但是在某些地方,我们有 someVar = NullString,其中 someVar 是一个字符串变量。现在,我收到无法从 NullStringClass 转换为字符串的错误。
<System.Reflection.DefaultMember("Value")> _
Public Class NullStringClass
属性定义为:
Public Property Value() As String
Get
Return ""
End Get
Set(ByVal value As String)
End Set
End Property
但它仍然抛出异常。据我所知,这应该解决了我的问题,但没有运气。我仍然得到同样的错误。所以,我的问题是一样的。有什么方法可以将该 NullString 变量转换为一个类并使用运算符重载进行不同的比较(包括 Null 和 Nothing),还可以用作对字符串变量的正常赋值?例如意味着
Dim s as String
s = NullString
应该工作以及以下应该工作:
If rsData("MyField").Value <> NullString Then
'Note: rsData("MyField").Value is DbNull
这是运算符重载的示例(如果有人感兴趣)
Public Shared Operator <>(ByVal mmyVal As Object, ByVal objVal As NullStringClass) As Boolean
If TypeOf mmyVal Is String Then
Return (Not String.IsNullOrEmpty(mmyVal))
Else 'If TypeOf mmyVal Is Object Then
Return (Not IsDBNull(mmyVal))
End If
End Operator
谢谢,尼克