DataRow对象.NET的扩展方法

时间:2015-03-06 15:39:14

标签: asp.net vb.net extension-methods

目前,我已经为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的布尔类型)。当然它将是扩展方法的可选参数。

1 个答案:

答案 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设置一些约束。虽然如果你保留两种方法,那么参数实际上仍然是可选的,因为它是方法的重载,这可能更容易。