Terry's blog

Focus on bigdata and cloud.

博客园 首页 新随笔 联系 订阅 管理
概述:
    在初始化的时候根据初始化列表自动产生类型的一种机制。
实例代码:    
      public static void Main()
            
{
              var x 
= new { a = 2, b = 4, c = "this is a string" };
               Console.WriteLine(x.a);  
                Console.WriteLine(x.b);
                Console.WriteLine(x.c);
          }

现在我们看一下,编译后的中间语言。

.method public hidebysig static void  Main() cil managed
{
  .entrypoint
  
// Code size       51 (0x33)
  .maxstack  4
  .locals init ([
0class '<>f__AnonymousType0`3'<int32,int32,string> x)
  IL_0000:  nop
  IL_0001:  ldc.i4.
2
  IL_0002:  ldc.i4.
4
  IL_0003:  ldstr      
"this is a string"
  IL_0008:  newobj     instance 
void class '<>f__AnonymousType0`3'<int32,int32,string>::.ctor(!0,
                                                                                              
!1,
                                                                                              
!2)
  IL_000d:  stloc.
0
  IL_000e:  ldloc.
0
  IL_000f:  callvirt   instance 
!0 class '<>f__AnonymousType0`3'<int32,int32,string>::get_a()
  IL_0014:  call       
void [mscorlib]System.Console::WriteLine(int32)
  IL_0019:  nop
  IL_001a:  ldloc.
0
  IL_001b:  callvirt   instance 
!1 class '<>f__AnonymousType0`3'<int32,int32,string>::get_b()
  IL_0020:  call       
void [mscorlib]System.Console::WriteLine(int32)
  IL_0025:  nop
  IL_0026:  ldloc.
0
  IL_0027:  callvirt   instance 
!2 class '<>f__AnonymousType0`3'<int32,int32,string>::get_c()
  IL_002c:  call       
void [mscorlib]System.Console::WriteLine(string)
  IL_0031:  nop
  IL_0032:  ret
}
 // end of method NewTest::Main
由此可见,在编译的时候确实已经已经根据列表中的值确定了其类型。
运行结果:
2
4
this is a string
posted on 2007-11-21 09:52  王晓成  阅读(944)  评论(0编辑  收藏  举报