VS智能感知如何在编译时知道匿名类的属性?

本文关键字:属性 感知 智能 编译 VS | 更新日期: 2023-09-27 18:05:48

我找不到任何东西,仍然想了解VS中的智能感知机制如何知道匿名类的属性…

只是一个基本的例子:

var anonymousObj = new[] { new { foo = "stack", boo = false },
                    new { foo = "overflow", boo = true }};
foreach (var item in anonymousObj)
{
    // how does VS intelli-sense already know the properties?
    Console.WriteLine("{0},{1}", item.foo, item.boo);
}

或另一个虚拟示例

最让我困惑的是,我们可以用动态内容、Linq表达式等初始化匿名类。

就像你正在使用查询表达式一样,比如说基于一些查询填充anonymous对象等,智能感知如何已经知道所有属性名称?比如,只要你输入item.就可以同时看到fooboo ?

我一直认为只有在运行时才能知道。

对于匿名类型,Visual studio能够显示智能感知,因为类型在编译时是已知的,而智能感知则不是与动态一起可用,因为类型是在运行时定义的。

但是它是如何在编译时知道var的类型的呢?

如果我错过了什么,我很抱歉,如果这是一个愚蠢的问题,我只是错过了一些东西,请指出我正确的方向。

VS智能感知如何在编译时知道匿名类的属性?

在编写代码时,匿名类型没有作为有效标识符的名称。然而,在编译时,匿名类型被转换成一个常规的命名类型,给定一个名称,给定一个定义,其属性与您的定义中需要的属性相对应,然后这个新的命名类型在任何地方被用来代替匿名类型。

匿名类型与动态无关;它们完全是静态类型的。对代码的单独分析提供了提供Intellisense所提供的所有信息所需的所有信息。