Übergeben Sie eine Eigenschaft dynamisch mithilfe von Reflektion an ihren tatsächlichen Typ

Ich müssen zu wirken, eine Eigenschaft, die tatsächliche Art dynamisch. Wie kann ich/Kann ich das mit der spiegelung?

Zu erklären, das Reale Szenario, an denen ich arbeite ein bisschen. Ich bin versucht zu rufen, die "Erste" extension-Methode auf Entity Framework-Eigenschaft. Die spezifische Eigenschaft genannt werden, die auf dem Framework context-Objekt als Zeichenfolge übergeben wird der Methode (wie auch die id des Datensatzes abgerufen werden). So muss ich den eigentlichen Typ des Objekts um die Erste Methode.

Kann ich nicht verwenden Sie die "Wo" - Methode auf das Objekt, wie die lambda oder die Delegierte Methode Bedarf noch der tatsächliche Typ des Objekts, um Zugriff auf die Eigenschaften.

Auch, wie das Objekt erzeugt wird, durch das Entity Framework kann ich nicht, wandeln Sie den Typ einer Schnittstelle und betreiben.

Dies ist Szenario-code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;

namespace NmSpc
{

    public class ClassA
    {
        public int IntProperty { get; set; }
    }

    public class ClassB
    {
        public ClassA MyProperty { get; set; }
    }

    public class ClassC
    {
        static void Main(string[] args)
        {
            ClassB tester = new ClassB();

            PropertyInfo propInfo = typeof(ClassB).GetProperty("MyProperty");
            //get a type unsafe reference to ClassB`s property
            Object property = propInfo.GetValue(tester, null);

            //get the type safe reference to the property
            ClassA typeSafeProperty = property as ClassA;

            //I need to cast the property to its actual type dynamically. How do I/Can I do this using reflection?
            //I will not know that "property" is of ClassA apart from at runtime
        }
    }
}
Kommentar zu dem Problem
Wie würden Sie warf es auf eine Art die Sie nicht kennen? Sie wissen, dass es an der Laufzeit. So können Sie nur behandeln es als ein Objekt. Kommentarautor: Stefan Steinegger
Könnten Sie erklären, ein wenig mehr zu Ihrem Szenario? Angenommen, es gäbe einen Weg, es zu tun dynamisch (eigentlich nicht, aber...), was würde Sie als Nächstes tun werden mit dieser variable? Kann man nicht nennen .IntProperty, weil Sie nicht wissen, die Art, also zurück zum Anfang es gibt keine Notwendigkeit zu werfen, die es zu ClassA. Sie nur weiterhin mit der Reflexion zu erhalten IntProperty und so weiter... Kommentarautor: Darin Dimitrov
Casting ist weitgehend eine compile-time Sache, nicht wirklich eine Reflexion Ding. Was meinst du genau zu tun ist, zu "wandeln Sie die Eigenschaft auf Ihren aktuellen Typs"? Es gibt einige Optionen, mit generics, aber ohne eine klare Vorstellung davon, was Sie erreichen wollen, ist es schwer zu geben, eine gute Antwort. Auch bei Generika (per MakeGenericMethod etc), würden Sie gerade haben es als eine T - aber das macht Sie nicht wirklich lassen Sie sehr viel mit ihm... Also: was willst du sobald Sie es eingegeben... Kommentarautor: Marc Gravell
Können Sie klären Ihre Frage. Weil ich könnte nicht es richtig zu verstehen. Kommentarautor: Paulo Santos
Es gibt keine echte dynamische casting im Rahmen. Typisch Probleme sind gelöst mit Schnittstellen oder Generika. Kommentarautor: Robert

InformationsquelleAutor der Frage Keith K | 2009-05-25

Schreibe einen Kommentar