Ich möchte einen Lambda-Ausdruck für jede Eigenschaft eines Objekts erstellen, der den Wert dynamisch liest.
Was ich bisher habe:
%Vor% Der Code funktioniert gut, wenn ich functionThatGetsValue
aufruft, solange "TypeOfProperty" fest codiert ist. Ich weiß, dass ich die "TypeOfProperty" nicht dynamisch weitergeben kann. Was kann ich tun, um mein Ziel zu erreichen?
Angenommen, Sie sind mit einem Func<TType, object>
-Delegaten zufrieden (wie in den obigen Kommentaren), können Sie Expression.Convert
um das zu erreichen:
Ich habe gsharps Post oben geändert, um den Wert direkt zu setzen und es etwas einfacher zu machen. Es ist nicht ideal, da es die Einführung der DynamicCast-Funktion gibt, bei der Sie Ihren Typ im Voraus kennen müssen. Mein Ziel war es, uns stark typisiert zu halten und kein Objekt zurückzugeben und dynamisches Schlüsselwort zu vermeiden. Halten Sie auch "Magie" auf ein Minimum.
%Vor%Beispiele:
%Vor%Sie könnten eine Hilfsmethode schreiben, die MakeGenericMethod oder eine Ausdrucksbaumstruktur verwendet, damit ein lambda den typisierten Aufruf ausführt, um DynamicCast basierend auf dem PropertyInfo-Objekt aufzurufen und es nicht im Voraus wissen zu müssen. Aber das ist weniger elegant.
Tags und Links .net c# lambda expression-trees