Использование отражения для получения свойства свойства - PullRequest
0 голосов
/ 06 октября 2010

Я пытаюсь получить значение локального пути, выполнив следующие действия:

  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 и передать его, поэтому я получаю ошибку «Объект не соответствует типу цели».

Есть идеи?

PS Я понимаю, что это не вопрос ac #, но не желая ограничивать возможные ответы, я отметил его как таковой, как вопрос .Net, и если я получу ответ на C #я могу перевести.

1 Ответ

1 голос
/ 06 октября 2010

Вам нужно получить реальный объект на каждом шаге и использовать его для получения следующего свойства:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...