zoukankan      html  css  js  c++  java
  • [C#3] 2var 类型推断

    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为编译器技巧,语法糖。匿名类型须此关键字搭配使用

  • 相关阅读:
    Redis开发与运维:SDS
    Redis开发与运维:数据迁移
    我的2019上半年
    C# 并发编程
    经典排序算法 — C# 版(上)
    图解 -- 树的汇总
    图解--队列、并发队列
    栈到CLR
    我们的数组
    算法复杂度
  • 原文地址:https://www.cnblogs.com/linianhui/p/csharp3_var.html
Copyright © 2011-2022 走看看