【发布时间】:2014-02-01 19:24:30
【问题描述】:
对于dynamic,我们几乎有一个动态指针,但不完全是一个动态对象。 C# 中真正的动态对象是ExpandoObject,但对于大多数人来说,这是一个真正未知的类。 expando 允许在运行时创建和删除成员,很像哈希(类似于 JavaScript)。
为什么 ExpandoObject 的优点是在一个单独的类中实现,而不仅仅是作为匿名类型的一个特性来实现?
也许由于缺乏类型安全性,这不是一个好的举措?或者可能是由于涉及 (DLR) 开销?
【问题讨论】:
-
“我们在 C# 中使用动态的大部分时间是在处理匿名类型时。”什么?在处理匿名类型时,您根本不应该使用
dynamic。如果是,则说明您错误地使用了该功能。匿名类型旨在创建具有编译时类型安全性的简单对象,当您使用dynamic时,您*会将其扔出窗口。 -
匿名类型早在
dynamic之前就已经实现了。 -
@talles 您根本不应该将
dynamic与匿名类型一起使用。如果您将它们一起使用,则很可能出现问题。您对匿名类型的使用不应与dynamic一起使用,您对dynamic的使用通常不应涉及匿名类型。 -
@HighCore 是的,这也是我的猜测。当然,你不应该那样做;这与匿名类型的预期目的相反。
-
@talles 如果任何给定的
variable的范围超出了方法范围,并且您必须在其他方法或类中使用它,则创建一个适当的强类型 POCO 对象来保存数据您当前正在输入匿名类型。
标签: c# anonymous-types expandoobject dynamic-typing