PropertyInfo在vb.net中一无所获

时间:2014-02-20 11:01:30

标签: vb.net

我在vb.net中使用此代码段。即使我的dataTable列名与类名属性

匹配,propertyinfo p也没有任何结果
Public Class ReflectionMethods(Of T As New)

' function that set the given object from the given data row
  Public Shared Sub SetItemFromRow(item As T, row As DataRow)


    ' go through each column
    For Each c As DataColumn In row.Table.Columns

        ' find the property for the column. at this point i am getting p as nothing
        Dim p As PropertyInfo = item.GetType().GetProperty(c.ColumnName)

        ' if exists, set the value
        If p IsNot Nothing AndAlso row(c) IsNot DBNull.Value Then
            p.SetValue(item, row(c), Nothing)
        End If
    Next
  End Sub
End Class

我得到的最终结果是一个类对象,所有内容都设置为空,因为它没有传递if条件。

嗨,Jon,我已将我的课程片段粘贴下来

Public Class StockProduct
Public SupplierName As String
Public ModelName As String
Public ModelDescription As String
Public ProductCategoryName As String
Public ManufacturerName As String
End Class

我有一个列匹配的dataTable dataTable where attributes match with the column names。请注意,productcategoryName已匹配,但在屏幕截图中未显示

2 个答案:

答案 0 :(得分:1)

选项:

  1. ColumnName错误 - 与属性名称不完全匹配。

  2. 没有您期望名称的公共财产。也许它是一个场地或私人财产。

  3. 也许使用DataTable中的ColumnName示例更新您的问题,以及您尝试填充的类的定义。

答案 1 :(得分:1)

您的班级没有任何属性。这条线

Public SupplierName As String

创建一个字段,而不是属性。

要修复您的代码,请执行以下操作之一... 要么改变类声明要说

Public Property SupplierName As String

等...

或更改您的媒体阅读代码以说明

Dim p As FieldInfo = item.GetType().GetField(c.ColumnName)