你能给我一些关于 C# 中动态类型限制的原因吗?我在“Pro C# 2010 and the .NET 4 platform”中读到了它们。这是一段摘录(如果在这里引用书籍是非法的,请告诉我,我将删除摘录):
虽然可以使用 dynamic 关键字定义很多东西,但它的使用存在一些限制。虽然它们不是显示停止器,但要知道动态数据项在调用方法时不能使用 lambda 表达式或 C# 匿名方法。例如,以下代码总是会导致错误,即使目标方法确实接受了一个委托参数,该委托参数接受一个字符串值并返回 void。
dynamic a = GetDynamicObject(); // Error! Methods on dynamic data can’t use lambdas! a.Method(arg => Console.WriteLine(arg));
为了规避这个限制,你需要直接使用底层委托,使用第 11 章中描述的技术(匿名方法和 lambda 表达式等)。另一个限制是动态数据点无法理解任何扩展方法(参见第 12 章)。不幸的是,这也将包括来自 LINQ API 的任何扩展方法。因此,使用 dynamic 关键字声明的变量在 LINQ to Objects 和其他 LINQ 技术中的用途非常有限:
dynamic a = GetDynamicObject(); // Error! Dynamic data can’t find the Select() extension method! var data = from d in a select d;
提前致谢。