[C#3] 2-var 类型推断

1.DEMO

static void Main()
{
    var Num = 6;
    var str = "乱舞春秋";
    var dou = 9.25d;
    Console.WriteLine(Num);
    Console.WriteLine(str);
    Console.WriteLine(dou);
}

var关键字,用来声明并初始化局部变量。编译器根据=右边的语句推断出变量实际的类型。 所以使用var的要求就是右边的语句必须可以让编译器推断出实际的类型。所以=号右边是必须要有值的,即是必须要初始化,不能只是声明。 但是有些不便于阅读代码了。于此同时,C#3.0的出现另一个新特性[匿名类型]给了var用武之地。

var并不是表示弱类型了,如下IL代码:

 1 .method private hidebysig static void  Main() cil managed
 2 {
 3   .entrypoint
 4   // 代码大小       41 (0x29)
 5   .maxstack  1
 6   .locals init ([0] int32 Num,
 7            [1] string str,
 8            [2] float64 dou)
 9   IL_0000:  nop
10   IL_0001:  ldc.i4.6
11   IL_0002:  stloc.0
12   IL_0003:  ldstr      bytearray (71 4E 1E 82 25 66 CB 79 ) 
13   IL_0008:  stloc.1
14   IL_0009:  ldc.r8     9.25
15   IL_0012:  stloc.2
16   IL_0013:  ldloc.0
17   IL_0014:  call       void [mscorlib]System.Console::WriteLine(int32)
18   IL_0019:  nop
19   IL_001a:  ldloc.1
20   IL_001b:  call       void [mscorlib]System.Console::WriteLine(string)
21   IL_0020:  nop
22   IL_0021:  ldloc.2
23   IL_0022:  call       void [mscorlib]System.Console::WriteLine(float64)
24   IL_0027:  nop
25   IL_0028:  ret
26 } // end of method Test::Main

从第6-8行就可看出编译器做了正确的类型推断。

2.总结

var为编译器技巧,语法糖。匿名类型须此关键字搭配使用

posted @ 2011-03-27 15:16  Timetombs  阅读(770)  评论(0编辑  收藏  举报