Sto cercando di ottenere i valori dagli oggetti all'interno di un elenco che fa parte di un oggetto principale.Uso della riflessione per ottenere valori dalle proprietà da un elenco di una classe
devo l'oggetto principale che contiene varie proprietà che possono essere raccolte.
In questo momento sto cercando di capire come accedere a un elenco generico contenuto nell'oggetto.
///<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;
}
Ho cercato di utilizzare un SetValue()
con MyObject su questo, ma errori fuori con (parafrasato):
oggetto non è di tipo
private bool isCollection(PropertyInfo p)
{
try
{
var t = p.PropertyType.GetGenericTypeDefinition();
return typeof(Collection<>).IsAssignableFrom(t) ||
typeof(Collection).IsAssignableFrom(t);
}
catch
{
return false;
}
}
}
Il codice per le parti pertinenti della classe che si sta tentando di riflettere potrebbe essere un po 'utile. –
dal List eredita IList è possibile aggirare questo cambiando in 'IList oLista'? –
Compilano anche questo? 'oLista' è un' oggetto', che non ha una proprietà chiamata 'PropertyType'. – FishBasketGordo