【发布时间】:2011-04-05 01:48:03
【问题描述】:
您能否给我一些在 C# 中限制动态类型的原因?我在“Pro C# 2010 and the .NET 4 platform”中读到了它们。这是一段摘录(如果在这里引用书籍是非法的,请告诉我,我将删除摘录):
虽然可以做很多事情 使用动态关键字定义, 有一些关于 它的用法。虽然他们没有显示 塞子,不知道动态数据 item 不能使用 lambda 表达式或 C# 匿名方法 调用方法时。例如, 以下代码将始终导致 在错误中,即使目标方法 确实有一个委托参数 它接受一个字符串值并返回 空白。
dynamic a = GetDynamicObject(); // Error! Methods on dynamic data can’t use lambdas! a.Method(arg => Console.WriteLine(arg));为了规避这个限制,你 需要与底层证券合作 直接委托,使用 第 11 章中描述的技术 (匿名方法和 lambda 表达式等)。另一个限制 是一个动态的数据点不能 了解任何扩展方法(请参阅 第 12 章)。不幸的是,这将 还包括任何扩展名 来自 LINQ API 的方法。 因此,使用声明的变量 动态关键字非常有限 在 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;
提前致谢。
【问题讨论】:
-
很明显,动态对象没有名为
Method的属性,也不是IEnumarable。我不认为你提到的那些东西是限制,也许你和作者不明白dynamic做了什么。 -
我不这么认为。编译器不会检查成员的有效性(如“方法”)。
标签: c# dynamic-keyword