Ich weiß, dass anonyme Funktionen nicht als Argumente für einen dynamischen Methodenaufruf unterstützt werden. Was sind weitere Einschränkungen des DLR in .NET 4.0?Was sind die Einschränkungen der Dynamic Language Runtime in .NET 4.0?
6
A
Antwort
11
Sie können Verwendung anonyme Funktionen, die Sie gerade sie zuerst werfen müssen:
dynamic list = new List<string>() { "10", "20" };
dynamic converted = list.ConvertAll((Func<string, int>) (x => int.Parse(x)));
Das gleiche gilt für Verfahren Gruppenumwandlungen:
foo.Click += (EventHandler) MyClickHandler;
Andere Einschränkungen ich gestoßen bin so weit:
- Statische Methoden und Konstruktoren können nicht dynamisiert werden c in Bezug auf die Art, aber kann in Bezug auf die Argumente dynamisch sein
- Sie nicht
dynamic
in einer Art Zwang Sie können in einer Schnittstelle für eine nicht
dynamic
als Typargument verwenden können Klassendeklaration, aber man kann es als Basisklasse für eine Typargument verwenden, dhclass Invalid : IEnumerable<dynamic> class Valid : List<dynamic>
Erweiterungsmethoden sind zur Ausführungszeit nicht auffindbar (aber man kann die statische Methode direkt mit dynamischen Argumente aufrufen)
- Es gibt einen Fehler in 4.0b1, so dass Sie nicht von
dynamic[]
zuIEnumerable<dynamic>
konvertieren können - das wird für die Veröffentlichung behoben werden. - Sie können nicht
dynamic
als Basisklasse verwenden
(Beachten Sie, dass diese Einschränkungen von C 4.0 # so viel wie der DLR selbst. Ich habe den Eindruck bekam, das war das, was Sie aber gemeint.)
Großartig, gut, um eine Antwort von Ihnen zu bekommen :) – amazedsaint
Nicht alle Verwendungen von Delegierten brauchen die Besetzung, nicht nur Anons/Lambdas? z.B. in btn.Click + = MyClickHandler; Wenn btn dynamisch ist, aber ein Click-Ereignis hat, funktioniert das nicht. Sie benötigen den Cast um den Namen der MyClickHandler-Methode. –
@Earwicker: Nicht * alle * Verwendungen von Delegaten, aber Sie haben Recht, dass Methodengruppenkonvertierungen ebenfalls eine Umwandlung erfordern. Wird meine Antwort entsprechend aktualisieren. –