CreateDelegate mit unbekannten Typen

Ich versuche zu erstellen, Delegieren, zum Lesen/schreiben von Eigenschaften der unbekannten Art von Klassen zur Laufzeit.

Habe ich eine generische Klasse Main<T> und eine Methode, die wie folgt aussieht:

Delegate.CreateDelegate(typeof(Func<T, object>), get)

wo get ist ein MethodInfo von der Eigenschaft, die gelesen werden sollen. Das problem ist, dass, wenn die Eigenschaft gibt int (ich glaube, das passiert für value-Typen) der obige code wirft ArgumentException, weil die Methode nicht gebunden werden kann. Bei string funktioniert es auch.

Das problem zu lösen, änderte ich den code, so dass entsprechende Delegate-Typ wird erzeugt, indem mit MakeGenericType. So jetzt der code:

Type func = typeof(Func<,>);
Type generic = func.MakeGenericType(typeof(T), get.ReturnType);
var result = Delegate.CreateDelegate(generic, get)

Das problem ist jetzt, dass der erzeugte Delegat-Instanz generic so, ich habe mit DynamicInvoke die so langsam als Reine Reflexion zu Lesen das Feld.

Also meine Frage ist warum ist, dass der erste code-snippet schlägt mit Wert-Typen. Nach MSDN es sollte funktionieren, da es sagt, dass

Den Rückgabetyp eines Delegaten ist kompatibel mit dem Rückgabetyp einer Methode, wenn der Rückgabetyp der Methode ist restriktiver als der Rückgabetyp des Delegaten

und so führen die Delegierten in den zweiten Ausschnitt so, dass es schneller ist als Reflexion.

Dank.

InformationsquelleAutor Giorgi | 2010-03-22
Schreibe einen Kommentar