Какой самый простой / чистый / самый простой / лучший способ для обработки нулевого значения строго типизированного набора данных в следующем случае:
- Базовый класс имеет значение Nullable, которое устанавливается через его конструктор
- Конструктор производного класса имеет строго типизированную строку набора данных в качестве параметра и создает исключение при доступе к нулевому значению.
Вот упрощенный пример, демонстрирующий проблему, с которой я сталкиваюсь.Любое сходство с вашим кодом является чисто случайным.
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 Public Sub New
только для того, чтобы показать 3 альтернативы, которые я рассмотрел.