我有一个自定义类,大约有30个属性。(即头端名称、头端大小…)
我希望能够通过字符串形式的属性名称来更新属性。
我正在考虑使用反射(不能100%确定这是否是最好的方法),而不是在添加到主对象时需要不断更新的大型事例语句。
通过我发现的东西,我创建了下面的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) 我不确定它在正确的位置。
任何帮助都将不胜感激,谢谢。
代码有一些问题:
-
您想要更新属性,但在循环中迭代时,您使用了错误的计数
-
此外,您使用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