【问题标题】:Property reflection - How to get value?属性反射——如何获得价值?
【发布时间】:2014-03-03 21:35:15
【问题描述】:

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

        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

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

【问题讨论】:

    标签: vb.net linq entity-framework


    【解决方案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) 的输出存储在一个临时变量中,稍后如果对象不是Nothing,则仅调用ToString()-函数

    【讨论】:

    • 是的,我根据那个例子试过了。无论出于何种原因,我都会收到“对象引用未设置为对象的实例”。查看我对代码的更新。也许“s”对象项目导致它失败?
    • 您的财产可能正在返回Nothing查看我的答案更新
    • seriesName = CStr(propInfo.GetValue(s, Nothing)) 修复了它
    【解决方案2】:

    当然应该是:

     ... propInfo.GetValue(s) ...
    

    通常您必须将表示this 实例的对象作为第一个参数传递。您收到该错误是因为它需要实例 s,而不是 PropertyInfo 实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多