.net 覆盖数据行';允许DBNULLS的s.Item属性

.net 覆盖数据行';允许DBNULLS的s.Item属性,.net,vb.net,.net,Vb.net,我发现我编写的大多数程序通常包含数据表,我经常通过选择数据行(通过循环或Linq)从表中提取数据,并通过编写以下内容来分配变量值: MyVar = ThisDataRow.Item("itm") 这非常有效,除非特定项是DBNull,在这种情况下会引发错误 现在,一个简单的修复方法是编写一个简单的函数/if语句,如果项的值为DBNull,则返回值或0或”,但我想知道以某种方式继承DataRow对象并创建一个新属性ItemOrEmpty是否有意义(或者你想叫它什么)不会引发错误并返回正确的值 这

我发现我编写的大多数程序通常包含
数据表
,我经常通过选择
数据行
(通过循环或Linq)从表中提取数据,并通过编写以下内容来分配变量值:

MyVar = ThisDataRow.Item("itm")
这非常有效,除非特定项是
DBNull
,在这种情况下会引发错误

现在,一个简单的修复方法是编写一个简单的函数/if语句,如果项的值为
DBNull
,则返回值或
0
,但我想知道以某种方式继承
DataRow
对象并创建一个新属性
ItemOrEmpty
是否有意义(或者你想叫它什么)不会引发错误并返回正确的值

这将允许我使用:

MyVar = ThisDataRow.Item("itm")

这取决于我是否要捕获
null

我的问题是:

  • 我不知道如何才能做到这一点,让DataTable使用这个新对象而不是DataRow—似乎我需要重载
    DataRow
    对象而不是创建一个新对象,但我不知道如何做到这一点
  • 这是个好主意还是个坏主意?你为什么这么认为
  • 这会不会增加大量开销,而不仅仅是创建一个简单的函数,每次运行
    DataRow.Item
  • 基本上,这是一个相当理论化的问题——总体而言,这是好还是坏?如何实现


    谢谢!!!

    为了完整起见-对于任何遇到这个问题的人-我最终的做法是接受@Tim的建议并编写我自己的扩展方法。 请注意,这是我写过的第一篇文章,所以请告诉我是否有更好的写作方法

    ''' <summary>
    ''' Returns the item from a DataRow and, if it is DBNull, it returns a specified default value
    ''' </summary>
    ''' <param name="ColumnName">The name of the Column in the datarow we want the value from.</param>
    ''' <param name="DefaultValue">The default value for that column if it is NULL.</param>
    <System.Runtime.CompilerServices.Extension()> _
    Public Function ItemOrEmpty(Of T)(ByVal dr As DataRow, ByVal ColumnName As String, ByVal DefaultValue As T) As T
        If dr.Item(ColumnName) Is Nothing Or IsDBNull(dr.Item(ColumnName)) Then
            Return DefaultValue
        Else
            Return dr.Item(ColumnName)
        End If
    End Function
    
    “”
    ''从DataRow返回项,如果为DBNull,则返回指定的默认值
    ''' 
    ''数据行中要从中获取值的列的名称。
    ''该列的默认值(如果为空)。
    _
    公共函数ItemOrEmpty(Of T)(ByVal dr作为DataRow,ByVal ColumnName作为String,ByVal DefaultValue作为T)作为T
    如果dr.Item(ColumnName)为Nothing或IsDBNull(dr.Item(ColumnName)),则
    返回默认值
    其他的
    返回dr.Item(ColumnName)
    如果结束
    端函数
    

    希望这能帮助其他人…

    你考虑过扩展方法吗?蒂姆,这正是我想要的!!-谢谢!如果你想将其作为解决方案发布,我会给你分数。谢谢!!+1为你发布解决方案供其他人查看。我很高兴我的评论有帮助:)我没有把它作为一个解决方案发布,因为它不是-它更像是把一个建议扔到立方体墙上给一个开发伙伴。。。。对我来说,这远远不止于此——对于一个从未处理过扩展方法的人来说,你让我看到了它们的可能性谢谢你,蒂姆
    ''' <summary>
    ''' Returns the item from a DataRow and, if it is DBNull, it returns a specified default value
    ''' </summary>
    ''' <param name="ColumnName">The name of the Column in the datarow we want the value from.</param>
    ''' <param name="DefaultValue">The default value for that column if it is NULL.</param>
    <System.Runtime.CompilerServices.Extension()> _
    Public Function ItemOrEmpty(Of T)(ByVal dr As DataRow, ByVal ColumnName As String, ByVal DefaultValue As T) As T
        If dr.Item(ColumnName) Is Nothing Or IsDBNull(dr.Item(ColumnName)) Then
            Return DefaultValue
        Else
            Return dr.Item(ColumnName)
        End If
    End Function