Estoy tratando de obtener los valores de los objetos dentro de una lista que es parte de un objeto principal.Usar la reflexión para obtener valores de propiedades de una lista de una clase
Tengo el objeto principal que contiene varias propiedades que pueden ser colecciones.
Ahora estoy tratando de averiguar cómo acceder a una lista genérica que está contenida en el objeto.
///<summary>
///Code for the inner class
///</summary>
public class TheClass
{
public TheClass();
string TheValue { get; set; }
} //Note this class is used for serialization so it won't compile as-is
///<summary>
///Code for the main class
///</summary>
public class MainClass
{
public MainClass();
public List<TheClass> TheList { get; set; }
public string SomeOtherProperty { get; set; }
public Class SomeOtherClass { get; set }
}
public List<MainClass> CompareTheValue(List<object> MyObjects, string ValueToCompare)
{
//I have the object deserialised as a list
var ObjectsToReturn = new List<MainClass>();
foreach(var mObject in MyObjects)
{
//Gets the properties
PropertyInfo piTheList = mObject.GetType().GetProperty("TheList");
object oTheList = piTheList.GetValue(MyObject, null);
//Now that I have the list object I extract the inner class
//and get the value of the property I want
PropertyInfo piTheValue = oTheList.PropertyType
.GetGenericArguments()[0]
.GetProperty("TheValue");
//get the TheValue out of the TheList and compare it for equality with
//ValueToCompare
//if it matches then add to a list to be returned
//Eventually I will write a Linq query to go through the list to do the comparison.
ObjectsToReturn.Add(objectsToReturn);
}
return ObjectsToReturn;
}
He tratado de utilizar un SetValue()
con MiObjeto en esto, pero con errores hacia fuera (parafraseado):
objeto no es de tipo
private bool isCollection(PropertyInfo p)
{
try
{
var t = p.PropertyType.GetGenericTypeDefinition();
return typeof(Collection<>).IsAssignableFrom(t) ||
typeof(Collection).IsAssignableFrom(t);
}
catch
{
return false;
}
}
}
El código para las partes pertinentes de la clase que está tratando de reflejar podría ser un poco útil. –
desde lista hereda IList ¿se puede solucionar esto cambiando a 'IList oTheList'? –
¿Esto incluso compila? 'oTheList' es un' object', que no tiene una propiedad llamada 'PropertyType'. – FishBasketGordo