2011-02-01 52 views
3

當我嘗試在C#程序的運行時檢索對象的值時,得到「對象與目標類型不匹配」。PropertyInfo GetValue在遞歸過程中拋出錯誤

public void GetMyProperties(object obj) 
{ 
    foreach(PropertyInfo pinfo in obj.GetType().GetProperties()) 
    { 
    if(!Helper.IsCustomType(pinfo.PropertyType)) 
    { 
     string s = pinfo.GetValue(obj, null); //throws error during recursion call 
     propArray.Add(s); 
    } 
    else 
    { 
     object o = pinfo.PropertyType; 
     GetMyProperties(o); 
    } 
    } 
} 

我通過我的類BrokerInfo具有類型代理的一個屬性,它inturn具有特性的目的 - 名字和姓氏(所有字符串爲簡單起見)。

- BrokerInfo 
    - Broker 
    - FirstName 
    - LastName 

我想遞歸檢查自定義類型並試圖獲得它們的值。我能夠做這樣的事情:

- Broker 
    - FirstName 
    - LastName 

請幫助。

更新:能夠解決它W /的幫助下:這裏是修改後的代碼。

public void GetMyProperties(object obj) 
{ 
    foreach(PropertyInfo pinfo in obj.GetType().GetProperties()) 
    { 
    if(!Helper.IsCustomType(pinfo.PropertyType)) 
    { 
     string s = pinfo.GetValue(obj, null); 
     propArray.Add(s); 
    } 
    else 
    { 
     object o = pinfo.GetValue(obj, null); 
     GetMyProperties(o); 
    } 
    } 
} 

IsCustom是我的方法來檢查類型是否是custome類型。這裏是代碼:

public static bool IsCustomType(Type type) 
{ 
    //Check for premitive, enum and string 
    if (!type.IsPrimitive && !type.IsEnum && type != typeof(string)) 
    { 
     return true; 
    } 
    return false; 
} 
+0

能否請您張貼`Helper.IsCustomType`的代碼? – 2011-02-01 21:03:13

+0

添加了代碼。 – 2011-02-02 19:38:52

回答

5

爲什麼鑽井的類型,而不是實例?

具體位置:

object o = pinfo.PropertyType; 
    GetMyProperties(o); 

它應該是這個樣子:

var o = pinfo.GetValue(obj, null); 
    GetMyProperties(o);