Ü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
}
}
}
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... InformationsquelleAutor der Frage Keith K | 2009-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor der Antwort Nisus
Hatte ich etwas Zeit und so versuchte ich mein problem zu lösen mit VS2010 und ich denke, dass ich Recht hatte bisher, wenn ich allerdings, dass die dynamische klappenmechanismus würde 'lösen' meine Frage. Siehe code unten.
InformationsquelleAutor der Antwort Keith K
Sobald Sie das reflektierte Art, die Sie verwenden können
Convert.ChangeType()
.InformationsquelleAutor der Antwort Marty
Dass eine variable von einem bestimmten Typ ist wirklich nur sinnvoll, zur compile-Zeit, und wird dir nicht helfen, die zur Laufzeit in der Verwendung in dieser Weise. Versuchen Sie, den code zu schreiben, wo du es nutzen... du wirst feststellen, dass es hält, schieben Sie die Voraussetzung, um zu wissen, die Art zu compile-Zeit auf einer bestimmten Ebene (vielleicht auch weiter oben in der Aufruf-Kette, aber du wirst noch irgendwann müssen geben Sie den konkreten Typ für diese nützlich zu sein).
Einer Sache, zum im Verstand zu halten, obwohl - wenn Ihr Typ ein Verweistyp ist, das Objekt ist noch wirklich der Typ, den Sie erstellt haben. Es ist nicht so, es ist ein Vorteil, um mit dem Objekt gespeichert, wie Ihr Typ vs. Objekt. Dies ist die Schönheit der Reflexion (sowie ein Teil von, warum es funktioniert). Es gibt wirklich keinen Grund, zu versuchen, "ändern", es wird der Typ zur Laufzeit in einem Guss, da es noch ein Objekt sein.
InformationsquelleAutor der Antwort Reed Copsey
Obwohl ich nach der Lösung der wirklichen Probleme der Welt.
Ich denke, die neue CLR4 dynamische klappenmechanismus kann das "schöne" Lösung.
Danke für all die responces.
InformationsquelleAutor der Antwort Keith K
Wie über die Einstellung des root-Wert als string und dann tragen Sie herum, wie eine saite, bis Sie brauchen, um zu konvertieren in das Ziel-Typ?
InformationsquelleAutor der Antwort euwe
//return instance;
InformationsquelleAutor der Antwort user8097903