Dans les cas où mon objet CLR est annulable, quand j'utilisais VB.NET j'ai utilisé cette méthode d'extension:
Private Function GetNullable(Of T As Structure)(ByVal row As System.Data.DataRow, ByVal fieldname As String, ByVal convert As Conversion(Of T)) As Nullable(Of T)
Dim nullable As Nullable(Of T)
If System.Convert.IsDBNull(row(fieldname)) Then
nullable = Nothing
Else
nullable = convert(row, fieldname)
End If
Return nullable
End Function
Avec le délégué suivant pour Conversion(Of T)
:
Private Delegate Function Conversion(Of T)(ByVal row As System.Data.DataRow, ByVal fieldname As String) As T
Je puis couche sur les extensions pour les types de données pertinents:
<Extension()> _
Public Function GetDouble(ByVal row As System.Data.DataRow, ByVal name As String) As Double
Return Convert.ToDouble(row(name))
End Function
<Extension()> _
Public Function GetNullableDouble(ByVal row As System.Data.DataRow, ByVal name As String) As System.Nullable(Of Double)
Return GetNullable(Of Double)(row, name, AddressOf GetDouble)
End Function
Enfin, je peux utiliser:
Dim amount As Double? = dr.GetNullableDouble("amount")
Génial! c'est exactement ce dont j'avais besoin! Et m'a présenté quelques nouveaux concepts pour envelopper mon cerveau! Merci en effet! – mellerbeck
Ok, une question. Je n'ai pas pu utiliser ceci avec DR.GetNullableDouble? est-ce parce qu'il devrait étendre sqlclient.sqldatareader ?? – mellerbeck
Oui, j'aurais dû fournir un exemple qui étend sqldatareader pour cet exemple. Je vais éditer quand j'ai le temps. – Larsenal