使用dynamic
,我们几乎拥有动态指针,但不完全是动态对象。 C#中真正的动态对象是ExpandoObject,但对于大多数人来说,这是一个非常未知的类。 expando允许在运行时创建和删除成员,就像哈希(类似于JavaScript)。
为什么ExpandoObject的优点是在一个单独的类中实现的,而不仅仅是作为匿名类型的一个特性实现?
也许这不是一个好的举动,因为缺乏类型安全性?或者可能是由于涉及(DLR)开销?
答案 0 :(得分:7)
因为匿名类型具有其他非常重要的功能 - 它们为您提供编译时类型安全性。
因为dynamic
和匿名类型只是不同的概念。第一个允许您在运行时分派对象成员,第二个允许您创建具有一些基本功能(相等,哈希码等)的静态类型对象,而无需创建相应的POCO类。为什么要以同样的方式实施呢?
顺便说一句。我使用它们非常多,很少需要使用dynamic
来处理它们。您确定正确使用这些语言功能吗?
的更新强> 的
我认为这是匿名类型教程中非常重要的部分:
如果必须存储查询结果或将它们传递到方法边界之外,请考虑使用普通的命名结构或类而不是匿名类型。