2014-12-02 70 views
0

我想加載一個DLL,併爲每種類型顯示屬性名稱和值。我有下面的代碼,它拋出一個System.Reflection.TargetException與消息「對象不符合目標類型」。反射從DLL中的所有類型獲取值

var DLL = Assembly.LoadFrom(PathToDLL); 
       foreach (Type type in DLL.GetTypes()) 
       { 
        foreach (PropertyInfo property in type.GetProperties()) 
        { 
         lstProperties.Items.Add(string.Format("{0} - {1}", property.Name, property.GetValue(DLL, null))); 
        } 
       } 

我試過用GetValue()調用使用類型,DLL和null,我做錯了什麼?

我測試對這個DLL有一個屬性:

public string TheValue{ get; set; } 

感謝所有。

+3

您需要一個類型的實例來獲取實例屬性的值。 – 2014-12-02 20:55:52

+1

你不能顯示一個**類**屬性的值,沒有一個。您只能顯示**對象**屬性的值。這是類和對象之間的區別很重要的地方。 – MikeSW 2014-12-02 20:57:51

+1

當然,在程序集中可能有類型,你不能實例化(抽象類可以想到)。在實例化所有你可以使用的類型之前,你應該三思而後行,它基本上運行着你不能控制的任意代碼(再次,加載任意程序集也是如此)。 – 2014-12-02 20:59:51

回答

2

擴展評論,這裏是他們正在談論的一個例子。

在DLL:

public class TheClass 
{ 
    public string TheValue { get; set; } 
} 

創建類的實例,並設置屬性值:

TheClass cls = new TheClass(); 
cls.TheValue = "hello!"; 

然後改變你的代碼來引用您創建的實例:

lstProperties.Add(string.Format("{0} - {1}", property.Name, property.GetValue(cls, null))); 
+0

我看到我要去哪裏錯了。謝謝! – Jay 2014-12-02 21:08:16

相關問題