Eigenschaften eines Objekts mit Ausdrucksbäumen lesen

8

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?

    
gsharp 08.05.2013, 08:48
quelle

3 Antworten

8

Angenommen, Sie sind mit einem Func<TType, object> -Delegaten zufrieden (wie in den obigen Kommentaren), können Sie Expression.Convert um das zu erreichen:

%Vor%     
LukeH 08.05.2013, 12:02
quelle
5

Nach Stunden des Googelns fand die Antwort hier . Ich habe die Ausschnitte aus dem Blogpost hinzugefügt, da es anderen helfen könnte, die gleichen Probleme zu haben:

%Vor%     
gsharp 08.05.2013 12:08
quelle
0

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.

    
Elan Hasson 23.06.2017 06:08
quelle

Tags und Links