:問題の最も簡単な/クリーン/以下の場合には厳密に型指定されたDataSetのnull値を処理するための最も簡単な/最良の方法は何
- 基底クラスのNullableを持っているが、
- 派生クラスのコンストラクタは、厳密に型指定されたDataSet Rowをパラメータとして持ち、null値にアクセスするときに例外をスローします。
私が直面している問題を示す簡単な例です。コードとの類似点はまったく偶然です。
Public MustInherit Class BaseClass
Private _Number as Nullable(of integer)
Public Sub New(Number as Nullable(of integer))
_Number = Number
End Sub
End Class
Public Class DerivedClass
Inherits BaseClass
'Throw System.Data.StrongTypingException "The value for column 'Number'
'in table 'SomeData' is DBNull." when Number is null
Public Sub New(DataRow as my DataDLL.SomeDataRow)
MyBase.New(DataRow.Number)
End Sub
'First statement of this 'Sub New' must be a call to 'MyBase.New'
'or 'MyClass.New' because base class 'BaseClass' of 'DerivedClass'
'does not have an accessible 'Sub New' that can be called with no arguments
Public Sub New(DataRow as my DataDLL.SomeDataRow)
If TermRow.IsNumberNull() Then
MyBase.New(Nothing)
Else
MyBase.New(DataRow.Number)
End If
End Sub
'Also Throw System.Data.StrongTypingException because As part of preparing
'the argument list for the call to IIf, the Visual Basic compiler calls
'every function in every expression.
Public Sub New(DataRow As MyData)
MyBase.New(DirectCast(IIf(DataRow.IsNumberNull(), _
Nothing, _
TermRow.Number), Nullable(Of Integer)))
End Sub
End Class
私は私が考えられ3つの選択肢を表示するために3 Public Sub New
を置きます。理にかなって
最初のコンストラクタでスローされた例外は何ですか? 2つ目は、最初の行でなければならないと言うように、すべてのロジックを1行にまとめる方法を理解する必要があります。 VBは楽しい! – Jay