【问题标题】:Extension method for DataRow object .NETDataRow 对象 .NET 的扩展方法
【发布时间】:2015-05-08 06:17:53
【问题描述】:

目前,我为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 的布尔类型)。肯定会是扩展方法的可选参数。

【问题讨论】:

  • 您是否知道框架中已经有一个名为T Field&lt;T&gt;(this DataRow row, string columnName) 的函数?见:msdn.microsoft.com/en-us/library/bb360891(v=vs.90).aspx
  • @Magnus: ... 它甚至支持可空类型,这比使用给定类型的默认值(OP 所做的)要好。

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


【解决方案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 施加一些限制。虽然如果你保留这两种方法,那么参数实际上仍然是可选的,因为它是方法的重载,这可能更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多