Quel est le plus simple/propre/plus facile/meilleure façon de gérer la valeur nulle d'un DataSet fortement typées dans le cas suivant:problème avec l'héritage et NullValue d'un DataSet fortement typé
- Une classe de base a une Nullable Valeur définie par le constructeur
- Le constructeur de la classe dérivée a la ligne DataSet fortement typée comme paramètre et l'exception Throw lors de l'accès à une valeur null.
Voici un exemple simplifié pour illustrer le problème auquel je suis confronté. Toute ressemblance avec votre code est purement fortuite.
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
J'ai mis 3 Public Sub New
que pour montrer 3 alternatives je considérais.
Quelle est l'exception levée sur votre premier constructeur? Sur le second, comme dit il doit être la première ligne, donc vous devez comprendre comment mettre toute votre logique sur une ligne. VB est amusant! – Jay