通过基于属性名称

时间:2015-11-10 15:17:05

标签: vb.net reflection

我有一个包含大约30个属性的自定义类。 (I.E. headername,headerize ...)

我希望能够以属性的名称将属性更新为字符串。

我正在考虑使用反射(不是100%确定这是否是最好的方法)而不是在我添加到主对象时需要不断更新的大型case语句。

通过我发现的东西我创建了以下Sub。我把它放在另一个位置,而不是对象的类。

Public Sub UpdateValue(ByRef MainData As FilesMainData, ByVal SearchForObjectPartName As String, ByVal NewValue As Object)
    Dim ObjectPartTypes() As System.Reflection.PropertyInfo = MainData.GetType().GetProperties()
    Dim ObjectPartNames() As System.Reflection.FieldInfo = MainData.GetType().GetFields()

    For I As Integer = 0 To ObjectPartNames.Count - 1
        If ObjectPartTypes(I).Name.Equals(SearchForObjectPartName) Then
            ObjectPartTypes(I).SetValue(ObjectPartTypes(I).GetType, NewValue,CType(I, Object) )
        End If
    Next

End Sub

1)我收到一些错误并且知道代码不对,但我不确定如何解决 2)我不确定它在正确的位置。

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

代码存在一些问题:

  1. 您想要更新属性,但是在迭代循环时,您使用了错误的计数

  2. 您也错误地使用SetValue,第一个参数必须是包含属性的对象的实例

  3. 以下是更新方法:

    Public Sub UpdateValue(ByRef MainData As FilesMainData, ByVal SearchForObjectPartName As String, ByVal NewValue As Object)
        Dim ObjectPartTypes() As System.Reflection.PropertyInfo = MainData.GetType().GetProperties()
        For I As Integer = 0 To ObjectPartTypes.Count - 1
            If ObjectPartTypes(I).Name.Equals(SearchForObjectPartName) Then
                ObjectPartTypes(I).SetValue(MainData, NewValue)
            End If
        Next
    End Sub