我有一个包含大约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)我不确定它在正确的位置。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
代码存在一些问题:
您想要更新属性,但是在迭代循环时,您使用了错误的计数
您也错误地使用SetValue,第一个参数必须是包含属性的对象的实例
以下是更新方法:
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