目前,我已经为DataRow
编写了将行值转换为特定类型对象的扩展方法,方法如下:
<ExtensionAttribute> _
Public Function GetValue(Of T)(row As DataRow, columnName As String) As T
'IF TABLE DOESN'T CONTAIN COLUMN RETURN DEFAULT OF T
If Not row.Table.Columns.Contains(columnName) Then
Return Activator.CreateInstance(Of T)()
'IF ROW IS DB NULL RETURN DEFAULT OF T
If row(columnName) Is DBNull.Value Then
Return Activator.CreateInstance(Of T)()
'RETURN T
Return CType(row(columnName), T)
End Function
我的问题是如何改进这种方法,用户可以设置对象(T)的默认值(例如,对于没有返回默认FALSE值而不是TRUE的布尔类型)。当然它将是扩展方法的可选参数。
答案 0 :(得分:1)
用户提供的默认值是否只是该方法的参数?像这样:
<ExtensionAttribute> _
Public Function GetValue(Of T)(row As DataRow, columnName As String, defaultValue As T) As T
If Not row.Table.Columns.Contains(columnName) Then
Return defaultValue
If row(columnName) Is DBNull.Value Then
Return defaultValue
Return CType(row(columnName), T)
End Function
在T
的潜在价值和参考类型之间设置可选参数可能会非常棘手。您可以对T
设置一些约束。虽然如果你保留两种方法,那么参数实际上仍然是可选的,因为它是方法的重载,这可能更容易。