0

需要帮助在 .net 中格式化数据表,在 vb.net 中给出以下代码

Dim dt As New DataTable
            dt.Columns.Add("a", GetType(System.String))
            dt.Columns.Add("b", GetType(System.String))

            dt.Rows.Add("N/A", "22")
            dt.Rows.Add("99", "22.3")
            dt.Rows.Add("Not Available", "#Error")
            dt.Rows.Add("5.5", "10")

' 需要建议在 .net c#/vb 中转换数据表

'将数据表的所有非数值转换为NULL,尽量避免循环使用正则表达式更新每一行

            'Result dt
            'a      b       
            'null   22
            '99     22.3
            'null   null
            '5.5    10
4

2 回答 2

1

嗯,如果您不需要表格以包含非数字值开头并且不这样处理,您可以编写自己的方法来添加行,该方法在添加它们之前检查它们是否为数字.

否则我想不出任何阻止​​循环的东西,如果你因为某些原因不想使用正则表达式,你可以检查是否可以进行转换(Convert.ToDouble)

于 2013-07-19T11:57:29.300 回答
0

发布工作代码(vb)

 Dim dt As New DataTable
            dt.Columns.Add("a")
            dt.Columns.Add("b")
            dt.Columns.Add("c")

Dim typeList As New List(Of Type)
            typeList.Add(GetType(Integer))
            typeList.Add(Nothing)
            typeList.Add(GetType(Decimal))

            dt.Rows.AddRow(typeList, {10, "23ff", "Test if Numeric 45.6"})
            dt.Rows.AddRow(typeList, {"Ten", "We are here", "89"})

扩展方法是

<System.Runtime.CompilerServices.Extension()> _
    Public Sub AddRow(dr As DataRowCollection, ByRef objTypeConversion As List(Of Type), objValue As Object())
        Dim length = objTypeConversion.Count

        If length <> objValue.Length Then
            Throw New Exception("Data Types must be provided for all Values")
        End If

        Dim _n As Integer = 0
        objTypeConversion.ForEach(Function(t)
                                      If t IsNot Nothing Then
                                          Try
                                              Dim converter = TypeDescriptor.GetConverter(t)
                                              If converter IsNot Nothing Then
                                                  objValue(_n) = CTypeDynamic(converter.ConvertFrom(objValue(_n)), t)
                                              End If
                                          Catch ex As Exception
                                              objValue(_n) = DBNull.Value
                                          End Try
                                      End If
                                      _n = _n + 1
                                  End Function)

        'Logic to convert into provided datatype
        dr.Add(objValue)
    End Sub
于 2013-07-22T09:17:57.350 回答