2014-03-03 111 views
3

我需要動態獲取屬性及其值。我的代碼如下失敗。有人能幫我一把嗎?我已經嘗試了很多例子,但迄今爲止還沒有。屬性反射 - 如何獲得價值?

 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 

此代碼會產生錯誤「對象與目標類型不匹配」。

回答

1

的問題已經在這裏爲C#Object does not match target type using C# Reflection

的解決辦法是改變這行代碼的回答你想要獲得價值的對象。 (在MSDN更多信息)

更新:

您應經常檢查反射結果Nothing值。因此,首先將propInfo.GetValue(s, Nothing)的輸出存儲在一個臨時變量中,稍後僅調用ToString()-函數,如果對象不是Nothing

+0

是的,我根據該示例嘗試過。出於任何原因,我得到「對象引用未設置爲對象的實例」。查看我的代碼更新。也許「s」對象項目導致它失敗? –

+0

你的財產可能返回'Nothing'看到我的回答更新 – peter

+0

seriesName = CStr(propInfo.GetValue(s,Nothing))修復它 –

0

當然應該是:

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

通常你必須通過代表this實例作爲第一個參數的對象。您正在獲取該錯誤,因爲它期望的是實例s,而不是PropertyInfo實例。

seriesName = propInfo.GetValue(propInfo, Nothing).ToString() 

這樣::

seriesName = propInfo.GetValue(s, Nothing).ToString() 

您需要通過