IEnumerable<T> und Reflexion
Hintergrund
Arbeiten .NET 2.0 Hier spiegelt Listen im Allgemeinen. Ich war ursprünglich mit t.IsAssignableFrom(typeof(IEnumerable))
zu erkennen, ob eine Eigenschaft, die ich war Traversierung unterstützt die IEnumerable
- Schnittstelle. (Und damit könnte ich warf das Objekt, um es sicher)
Aber dieser code wurde nicht in der Bewertung auf True
wenn das Objekt ein BindingList<T>
.
Nächsten
Habe ich versucht zu verwenden t.IsSubclassOf(typeof(IEnumerable))
und hatte kein Glück entweder.
Code
///<summary>
///Reflects an enumerable (not a list, bad name should be fixed later maybe?)
///</summary>
///<param name="o">The Object the property resides on.</param>
///<param name="p">The Property We're reflecting on</param>
///<param name="rla">The Attribute tagged to this property</param>
public void ReflectList(object o, PropertyInfo p, ReflectedListAttribute rla)
{
Type t = p.PropertyType;
//if (t.IsAssignableFrom(typeof(IEnumerable)))
if (t.IsSubclassOf(typeof(IEnumerable)))
{
IEnumerable e = p.GetValue(o, null) as IEnumerable;
int count = 0;
if (e != null)
{
foreach (object lo in e)
{
if (count >= rla.MaxRows)
break;
ReflectObject(lo, count);
count++;
}
}
}
}
Die Absicht
Möchte ich im Grunde tag-Listen möchte ich darüber nachdenken, durch die ReflectedListAttribute
und rufen Sie diese Funktion über die Eigenschaften, die es hat. (Bereits In Arbeit)
Einmal in dieser Funktion, da das Objekt die Immobilie befindet sich auf, und die PropertyInfo
Verwandte, um den Wert der Immobilie, werfe es ein IEnumerable (vorausgesetzt, es ist möglich) und dann Durchlaufen Sie jedes Kind und nennen ReflectObject(...)
auf das Kind mit der count-variable.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die
as IEnumerable
und die variable ist nicht null-Sie wissen, dass es nicht implementierenIEnumerable
- Schnittstelle.Brauchen Sie nicht den code:
Wäre dies genug:
Vom MSDN
Auch Ihre Umsetzung IsAssignableFrom falsch ist, sollten Sie es so:
Diese sollte true zurückgeben, wenn die IEnumerable-Schnittstelle implementiert, die von t..
Warum willst du die if-Anweisung überhaupt?
Sie haben bereits eine
var e = ... as IEnumerable
und anschließend überprüfen, ob nicht null ist.Ist das nicht genug?
Diese Arbeit. 🙂
Einen
List
verlängertCollection
. So, die tests sind unterschiedlich für Sie. EinDictionary
hat zwei interne Container. Daher ist ein test für die gleiche.Anwendungsbeispiel -