C# 动态对象智能感知

C# 动态对象智能感知,c#,visual-studio,object,dynamic,intellisense,C#,Visual Studio,Object,Dynamic,Intellisense,若dynamic在编译时解析为object,并且所有.NET类型都扩展了object,那个么dynamic在IntelliSense方面为什么不像object呢?每当我使用dynamic时,我都会收到一条消息,上面写着“dynamic expression.这将在运行时解决”。当然,它也应该显示对象成员?Intellisense在动态类型中不起作用。它是在运行时解析的。动态类型适用于静态类型和匿名类型 如果intellisense能起作用,它就违背了动态性的根本目的 我认为您应该阅读Jon Sk

若dynamic在编译时解析为object,并且所有.NET类型都扩展了object,那个么dynamic在IntelliSense方面为什么不像object呢?每当我使用dynamic时,我都会收到一条消息,上面写着“dynamic expression.这将在运行时解决”。当然,它也应该显示对象成员?

Intellisense在动态类型中不起作用。它是在运行时解析的。动态类型适用于静态类型和匿名类型

如果intellisense能起作用,它就违背了动态性的根本目的


我认为您应该阅读Jon Skeet关于对象与动态的回答

Intellisense在动态类型中不起作用。它是在运行时解析的。动态类型适用于静态类型和匿名类型

如果intellisense能起作用,它就违背了动态性的根本目的


我认为您应该阅读Jon Skeet关于对象与动态的回答,我怀疑它没有提供这些成员,因为对象上的任何方法都可能有任意数量的重载,而在intellisense时它显然不知道。因此,它可能为特定的方法调用显示了错误的intellisense信息。

我怀疑它没有提供这些成员,因为
对象上的任何方法都可能存在任意数量的重载,这在intellisense时显然是不知道的。因此,它可能会为特定方法调用显示错误的intellisense信息。

最终是因为所有动态操作都使用动态调度,即不使用编译时链接,因此,实际上并不能保证任何成员确实存在,即使是
ToString
,因为对象的动态层甚至可以自由截取/替换/删除
对象的基本操作。因此,intellisense窗口试图显示任何内容都是不诚实的

是的,它被编译为
对象
,但这更多是因为(几乎)所有对象都是
对象
(或者可以这样装箱),因此运行时知道,无论动态对象是什么,它都可以作为对象引用保存

但是,如果您想使用
对象
成员,或者如果您想让intellisense显示它们,您必须首先强制转换到
对象
——这本身也是一个动态操作


这并不是说不可能为动态语言显示intellisense成员,当然是这样(我相信Iron Python可以),只是在C#中不可能——这是合理的。

最终是因为所有动态操作都使用动态调度,即不使用编译时链接,因此,实际上并不能保证任何成员确实存在,即使是
ToString
,因为对象的动态层甚至可以自由截取/替换/删除
对象的基本操作。因此,intellisense窗口试图显示任何内容都是不诚实的

是的,它被编译为
对象
,但这更多是因为(几乎)所有对象都是
对象
(或者可以这样装箱),因此运行时知道,无论动态对象是什么,它都可以作为对象引用保存

但是,如果您想使用
对象
成员,或者如果您想让intellisense显示它们,您必须首先强制转换到
对象
——这本身也是一个动态操作


这并不是说不可能为动态语言显示intellisense成员,当然是这样(我相信Iron Python可以),只是在C语言中不可能——而且是合理的。

“如果动态在编译时解析为对象”。。。直到运行时它才解析。“如果动态在编译时解析为对象”。。。它直到运行时才解决。“如果intellisense能够工作,它就违背了动态性的目的。”——有趣的是,它确实适用于Javascript,Javascript中的一切都是动态的。IntelliSense为自动完成提供了什么属性和方法取决于实际执行代码,我相信在C#的情况下也可以这样做。同意@JohnWhite,我们可以使用IntelliSense for js和typescript。从这个意义上讲,intellisense只是一个提示,它很可能是我们在jsdoc中定义的结构。而C#dynamic对象应该有类似的东西“如果intellisense能够工作,它就违背了动态性的根本目的。”——有趣的是,它确实适用于Javascript,Javascript中的一切都是动态的。IntelliSense为自动完成提供了什么属性和方法取决于实际执行代码,我相信在C#的情况下也可以这样做。同意@JohnWhite,我们可以使用IntelliSense for js和typescript。从这个意义上讲,intellisense只是一个提示,它很可能是我们在jsdoc中定义的结构。而C#动态对象应该有类似的东西