为什么匿名类型不像ExpandoObject那样动态?

tal*_*les 2 c# anonymous-types dynamic-typing expandoobject

随着dynamic我们非常有动感指针,但不完全是一个动态对象.C#中真正的动态对象是ExpandoObject,但对于大多数人来说,这是一个非常未知的类.expando允许在运行时创建和删除成员,就像哈希(类似于JavaScript).

为什么ExpandoObject的优点是在一个单独的类中实现的,而不仅仅是,作为匿名类型的一个特性实现?

也许这不是一个好的举动,因为缺乏类型安全?或者可能是由于涉及(DLR)开销?

Mar*_*zek 7

因为匿名类型具有其他非常重要的功能 - 它们为您提供编译时类型安全性.

因为dynamic和匿名类型只是不同的概念.第一个允许您在运行时分派对象成员,第二个允许您创建具有一些基本功能(相等,哈希码等)的静态类型对象,而无需创建相应的POCO类.为什么他们应该以同样的方式实施呢?

顺便说一句.我使用它们非常多,而且很少需要dynamic用来处理它们.您确定正确使用这些语言功能吗?

更新

我认为这是匿名类型教程中非常重要的部分:

如果必须存储查询结果或将它们传递到方法边界之外,请考虑使用普通的命名结构或类而不是匿名类型.