PropertyInfo getValue di lancio di errore durante la ricorsione
-
28-10-2019 - |
Domanda
Sto ottenendo "L'oggetto non corrisponde al tipo di destinazione" quando provo a recuperare il valore di un oggetto in fase di esecuzione nel mio programma C#.
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);
}
}
}
Passo un oggetto del mio brokerInfo di classe che ha una proprietà di Type Broker che Intern ha proprietà - FirstName e LastName (tutte le stringhe per semplicità).
- BrokerInfo
- Broker
- FirstName
- LastName
Sto cercando di controllare ricorsivamente i tipi personalizzati e sto cercando di ottenere i loro valori. Sono in grado di fare per qualcosa di simile:
- Broker
- FirstName
- LastName
Per favore aiuto.
Aggiornamento: è stato in grado di risolverlo con l'aiuto di Leppie: ecco il codice modificato.
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 è il mio metodo per verificare se il tipo è di tipo Custome o meno. Ecco il codice:
public static bool IsCustomType(Type type)
{
//Check for premitive, enum and string
if (!type.IsPrimitive && !type.IsEnum && type != typeof(string))
{
return true;
}
return false;
}
Soluzione
Perché stai perforando il tipo, anziché l'istanza?
Specificamente qui:
object o = pinfo.PropertyType;
GetMyProperties(o);
Dovrebbe sembrare qualcosa di simile:
var o = pinfo.GetValue(obj, null);
GetMyProperties(o);