Kann beim Erstellen von Stellvertretern für Eigenschaften nicht an die Zielmethode gebunden werden

8

Versuchen Sie, zwei Wörterbücher mit ausgegebenen Delegaten zu erstellen, um beim dynamischen Abrufen / Festlegen der Werte von Eigenschaften eine verbesserte Leistung zu erzielen.

Code:

%Vor%

Allerdings bekomme ich die folgende Ausnahme:

  

Kann wegen der Signatur oder der Sicherheit nicht an die Zielmethode gebunden werden   Die Transparenz ist nicht mit der des Delegattyps kompatibel.

Nach dem, was ich gelesen habe, wird dies durch Eigenschaften des statischen / indexierten / Werttyps verursacht, die Properties -Auflistung enthält keine statischen oder indexierten Eigenschaften, aber ich muss dies für Werttypeigenschaften wie int und double .

Wie kann ich die Getter / Setter erstellen, die ich brauche, während ich meinen Code abstrakt halte und Generika vermeide?

    
Alex Hope O'Connor 02.07.2013, 05:55
quelle

2 Antworten

7

Ok fand meine Antwort auf diese Frage: MethodInfo.Invoice-Leistungsproblem

Genauer gesagt dieser Artikel: Reflektion und Erkundung der Delegierten ermöglichen

>

Hier ist der Jist des Codes, mit dem ich gelandet bin:

%Vor%

Die generierten Delegierten scheinen durchschnittlich 80% schneller zu sein als die Reflexion, also bin ich mit dem Ergebnis zufrieden!

    
Alex Hope O'Connor 03.07.2013, 05:38
quelle
-1

Ich habe denselben Fehler bekommen. Ich habe die Expressions API verwendet, um dieses Problem zu beheben.

Hinweis: Zu referenzierende Methode ist

  • nicht generisch.
  • ist statisch.

Der Name des Delegaten ist Formel und seine Signatur lautet wie folgt

%Vor%
  1. Erhalte MethodInfo, auf die als Delegate

    verwiesen werden soll %Vor%
  2. Bereiten Sie Argumente des Delegaten als Parameterausdruck vor. Argument 1: Dictionary<string, float> Argument 2: List<Dictionary<string, float>>

    %Vor%

    var arg2Expression = Ausdruck.Parameter (typeof (Liste & gt;));

  3. Generieren Sie die finale Methode Call Expression und geben Sie Delegate zurück.

    %Vor%
Abhijeet Nagre 01.03.2016 10:30
quelle