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.
就可以同时看到foo
和boo
?
我一直认为只有在运行时才能知道。
对于匿名类型,Visual studio能够显示智能感知,因为类型在编译时是已知的,而智能感知则不是与动态一起可用,因为类型是在运行时定义的。
但是它是如何在编译时知道var
的类型的呢?
如果我错过了什么,我很抱歉,如果这是一个愚蠢的问题,我只是错过了一些东西,请指出我正确的方向。
在编写代码时,匿名类型没有作为有效标识符的名称。然而,在编译时,匿名类型被转换成一个常规的命名类型,给定一个名称,给定一个定义,其属性与您的定义中需要的属性相对应,然后这个新的命名类型在任何地方被用来代替匿名类型。
匿名类型与动态无关;它们完全是静态类型的。对代码的单独分析提供了提供Intellisense所提供的所有信息所需的所有信息。