Ich versuche, die Werte von Objekten innerhalb einer Liste zu erhalten, die Teil eines Hauptobjekts ist.Verwenden von Reflektion zum Abrufen von Werten aus Eigenschaften aus einer Liste einer Klasse
Ich habe das Hauptobjekt, das verschiedene Eigenschaften enthält, die Sammlungen sein können.
Im Moment versuche ich herauszufinden, wie man auf eine generische Liste, die im Objekt enthalten ist, zugreifen kann.
///<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;
}
Ich habe ein SetValue()
mit MyObject dazu verwenden versucht, aber es Fehler aus mit (paraphrasiert):
Objekt ist nicht vom Typ
private bool isCollection(PropertyInfo p)
{
try
{
var t = p.PropertyType.GetGenericTypeDefinition();
return typeof(Collection<>).IsAssignableFrom(t) ||
typeof(Collection).IsAssignableFrom(t);
}
catch
{
return false;
}
}
}
Der Code für die relevanten Teile der Klasse, die Sie versuchen zu reflektieren, könnte ein bisschen nützlich sein. –
seit List IList erbt, können Sie dies umgehen, indem Sie in 'IList oTheList' wechseln? –
Kompiliert das überhaupt? 'oTheList' ist ein' Objekt', das keine Eigenschaft namens 'PropertyType' hat. – FishBasketGordo