物业反思 - 如何获得价值?

时间:2014-03-03 21:35:15

标签: vb.net linq entity-framework

我需要动态获取属性及其值。我下面的代码失败了。有人可以帮我一把吗?到目前为止,我尝试了很多例子,但没有。

        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

此代码产生错误“对象与目标类型不匹配。”

2 个答案:

答案 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实例。