簡體   English   中英

使用反射獲取屬性

[英]Using reflection to get a properties property

我正在嘗試通過執行以下操作來獲取本地路徑的值:

  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#的答案,我就可以翻譯。

您需要在每個步驟中獲取實際的對象,並使用它來獲取下一個屬性:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM