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.

InformationsquelleAutor Aren | 2010-05-10
Schreibe einen Kommentar