2010-10-06 116 views
0

我想這樣做來獲得本地路徑的值如下:使用反射來得到一個屬性的屬性

Dim bar As WebProxy = WebProxy.GetDefaultProxy 
    Dim scriptEngine = bar.GetType().GetProperty("ScriptEngine", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 
    Dim acs As PropertyInfo = scriptEngine.PropertyType().GetProperty("AutomaticConfigurationScript", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 
    Dim localPath As PropertyInfo = acs.PropertyType().GetProperty("LocalPath", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance) 
    Dim value As String = localPath.GetValue(acs, Nothing).ToString 

我敢肯定的是,這裏的問題是,我傳遞一個PropertyInfo對象變成了localPath .GetValue,而不是實際的對象本身。唯一的問題是,我不能投的

Dim acs As PropertyInfo = scriptEngine.PropertyType().GetProperty("AutomaticConfigurationScript", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 

結果成的System.Uri AutomaticConfigurationScript並把它傳遞,因此我得到一個錯誤「對象不匹配目標類型」。

任何想法?

P.S我意識到這不是一個C#的問題,但不想限制可能的答案,我已經標記它,因爲它是一個.NET的問題,如果我收到答案在C#我可以翻譯。

回答

1

你需要得到在每一步實際的對象,並用它來獲得一個屬性:

Dim bar As WebProxy = WebProxy.GetDefaultProxy 

Dim scriptEngineProperty = bar.GetType().GetProperty("ScriptEngine", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 
Dim scriptEngineObject as Object = scriptEngineProperty.GetValue(bar, Nothing) 

Dim acsProperty As PropertyInfo = scriptEngineObject.GetType().GetProperty("AutomaticConfigurationScript", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 
Dim acsObject as Object = acsProperty.GetValue(scriptEngineObject, Nothing) 

Dim localPathProperty As PropertyInfo = acsObject.GetType().GetProperty("LocalPath", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance) 
Dim value As String = localPath.GetValue(acsObject, Nothing).ToString 
+0

輝煌,感謝里德。我應該知道,但我現在有點時間限制恐慌:) – Ben 2010-10-06 15:00:40

+0

@本:很高興它有幫助;) – 2010-10-06 15:05:54