Einschränkungen des dynamischen Typs in C #
Könnten Sie mir Gründe für Einschränkungen des dynamischen Typs in C # nennen? Ich habe darüber in "Pro C # 2010 und der .NET 4-Plattform" gelesen. Hier ist ein Auszug (wenn das Zitieren von Büchern hier illegal ist, sag es mir und ich werde den Auszug entfernen):
Während mit dem Schlüsselwort dynamic sehr viele Dinge definiert werden können, gibt es einige Einschränkungen hinsichtlich der Verwendung. Beachten Sie, dass ein dynamisches Datenelement beim Aufrufen einer Methode keine Lambda-Ausdrücke oder anonymen C # -Methoden verwenden kann, obwohl es sich nicht um Show-Stopper handelt. Der folgende Code führt beispielsweise immer zu Fehlern, selbst wenn die Zielmethode tatsächlich einen Delegatparameter verwendet, der einen Zeichenfolgenwert annimmt und void zurückgibt.
dynamic a = GetDynamicObject();
// Error! Methods on dynamic data can’t use lambdas!
a.Method(arg => Console.WriteLine(arg));
Um diese Einschränkung zu umgehen, müssen Sie direkt mit dem zugrunde liegenden Delegaten arbeiten und die in Kapitel 11 beschriebenen Techniken anwenden (anonyme Methoden und Lambda-Ausdrücke usw.). Eine weitere Einschränkung besteht darin, dass ein dynamischer Datenpunkt keine Erweiterungsmethoden verstehen kann (siehe Kapitel 12). Leider würde dies auch eine der Erweiterungsmethoden einschließen, die von den LINQ-APIs stammen. Daher kann eine mit dem Schlüsselwort dynamic deklarierte Variable in LINQ to Objects und anderen LINQ-Technologien nur sehr eingeschränkt verwendet werden:
dynamic a = GetDynamicObject();
// Error! Dynamic data can’t find the Select() extension method!
var data = from d in a select d;
Danke im Voraus