Erweiterungsmethode und dynamisches Objekt
Werde ich fasse mein problem in den folgenden code-snippet.
List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
Obige code funktioniert Prima.
Nun versuchte ich die folgenden
dynamic dList = list;
Console.WriteLine(dList.First());
aber ich bin immer RuntimeBinderException.Warum ist es so?
InformationsquelleAutor der Frage santosh singh | 2011-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erweitern Stecya Antwort... Erweiterung Methoden nicht unterstützt dynamische Typisierung in form von extension-Methodend.h. genannt, als wären Sie die Instanz-Methoden. Jedoch wird diese Arbeit:
Natürlich, kann oder kann nicht nützlich sein. Wenn Sie könnten mehr Informationen darüber, warum und wie Sie versuchen, verwenden Sie die dynamische Typisierung, vielleicht können wir dann mehr helfen.
InformationsquelleAutor der Antwort Jon Skeet
Erweitern auf Jon ' s Antwort, der Grund, warum das nicht funktionieren wird, weil in normalen, nicht-dynamische code-Erweiterung Methoden arbeiten, indem Sie eine vollständige Suche nach allen Klassen bekannt, die der compiler für eine statische Klasse, die eine Erweiterung Methode entspricht. Die Suche geht in Ordnung auf der Grundlage der namespace Verschachtelung und zur Verfügung
using
Richtlinien in jedem namespace.Das bedeutet, dass, um eine dynamische Erweiterung Methode invocation korrekt aufgelöst, irgendwie hat das DLR zu wissen zur Laufzeit was alle namespace-schachtelungen und
using
Richtlinien wurden in Ihrem source-code. Haben wir nicht ein Mechanismus, der nützlich für die Codierung, die alle diese Informationen in die call site. Wir als die Erfindung einen solchen Mechanismus, aber beschlossen, dass es zu hohen Kosten produziert und zu viel planen Risiko es Wert sein.InformationsquelleAutor der Antwort Eric Lippert
Weil
First()
ist nicht Methode derList
. Es wird definiert, in Linq-ErweiterungIEnumerable<>
InformationsquelleAutor der Antwort Stecya