我需要动态获取属性及其值。我下面的代码失败了。有人可以帮我一把吗?到目前为止,我尝试了很多例子,但没有。
Dim seriesName As String = s.SeriesName
If model.Settings.ShowNativeLanguage Then
Dim propInfo As System.Reflection.PropertyInfo = s.GetType().GetProperty(model.Country)
seriesName = CStr(propInfo.GetValue(s, Nothing))
End If
此代码产生错误“对象与目标类型不匹配。”
答案 0 :(得分:1)
这里已经回答了C#Object does not match target type using C# Reflection
的问题解决方案是更改代码的这一行:
seriesName = propInfo.GetValue(propInfo, Nothing).ToString()
到此:
seriesName = propInfo.GetValue(s, Nothing).ToString()
您需要传递要获取值的对象。 (MSDN)
中的更多信息<强>更新强>
您应该始终检查Nothing
值的反映结果。因此,首先将propInfo.GetValue(s, Nothing)
的输出存储在临时变量中,然后只调用ToString()
- 函数,如果对象不是Nothing
答案 1 :(得分:0)
当然应该是:
... propInfo.GetValue(s) ...
通常,您必须将表示this
实例的对象作为第一个参数传递。您收到该错误是因为它期望实例s
,而不是PropertyInfo
实例。