これは非常に奇妙な質問です、あなたはそれがそうであると思うかもしれません。私はVB6からVB.NET2010への大規模な移行プロジェクトに取り組んでいます。VB6の一部として、NullString = ""として定義された定数があります。.NETでも同様の行に移行され、使用されます。私たちが抱えている問題は、このNullStringと比較されているRecordSet(DataTableの単なるラッパー)からの値を比較するときに、比較のためにエラーが発生することです。プロジェクトは活発に開発されているため、プラグマをほとんど理解していないがあまり高度ではない移行ツール(VB MIgration Partner)に依存する必要があります。クラス(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
ありがとう、ニック