Mein Team ist gerade dabei, eine Anwendung von targeting .NET 4.0 auf 4.6.2 zu aktualisieren. Ja, spät zu den Party (s), aber besser spät als nie.Expression Body Unterschiede zwischen .NET 4 und .NET 4.6.2
In unserer Anwendung gibt es eine Erweiterungsmethode, die die MethodInfo der zurückgegebenen Methode aus einem Ausdruck zurückgibt. Mit anderen Worten, wenn wir haben:
public class Foo
{
public void DoSomething() { }
}
und dann hatten einen Ausdruck
Expression<Func<Foo, Action>> = f => f.DoSomething;
dann unsere Erweiterungsmethode die Method des Verfahrens DoSomething()
Der Code funktionierte großartig in zurückkehren würde .NET 4.0, funktioniert aber nicht in .NET 4.6.2. Ich habe seitdem den Code geändert, um zu arbeiten, aber meine Frage ist, weiß jemand, wo in den Release Notes von .NET 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1 und 4.6.2 dies dokumentiert wäre? Ich habe sie mehrere Male ohne etwas gelesen und durchsucht.
Dies sind die Release Notes Ich habe mir durch:
- https://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn458352(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn720543(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dn833127(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/mt620033(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/mt712575(v=vs.110).aspx
Wenn Sie die lokalen Variablen zu vergleichen, beim Debuggen, können Sie sehen, wie die Methodenrümpfe der Ausdrücke unterscheiden zwischen .NET 4.0 und 4.6.2:
Ich bin mir bewusst, dass .NET eine Methode eingeführt hat, die dies tut; Ich bin interessiert, wo die Veränderung dokumentiert ist, im Gegensatz zu der Lösung (die ich bereits habe).
Vielen Dank im Voraus für unsere Hilfe!
Ja, weil Sie in Ihrem Beispiel einen Delegaten verwenden und die API für den Zugriff geändert hat.Es gibt eine Frage dazu hier irgendwo in meinen Favoriten, aber ich bin auf meinem Handy. Aber Sie könnten es in Ausdruck> x = f => f.DoSomething(); 'ändern und so auf die MethodInfo zugreifen (was besser sein sollte). –
pinkfloydx33
Eine der Antworten hier sollte helfen, obwohl Sie es versuchen sollten ein 'Ausdruck>' und nicht 'Ausdruck >' http://stackoverflow.com/a/26976055/491907 Sie versuchen, eine Methodengruppe zu verwenden, die im Wesentlichen ein Delegat ist, und Sie müssen etwas extra "auspacken" "um zur Methode zu kommen –
pinkfloydx33
Auch um Ihre Frage zur Dokumentation spezifisch zu beantworten, kam die Änderung in 4.5 zustande, aber ich bezweifle, dass dies ausdrücklich als eine Art Missbrauch des Systems dokumentiert wurde. Wenn überhaupt, würden Sie es in Bezug auf 'Delegate's oder' MethodInfo.CreateDelegate' finden, wofür es geändert wurde. – pinkfloydx33