• C#3.0 为我们带来什么(4) —— 具有隐式类型的局部变量var


    在c#3.0里允许我们这样定义变量
    var age = 10;
    var name = "james";
    var time = DateTime.Now;
    var books = new string[]{"aa","bb"};
    但是也仅此而已,var只允许我们定义c#编译器通过上下文推断出类型的变量。
    var x;                 // 错误,没有用来推断类型的初始化器
    var y = { 1, 2, 3 };  // 错误,不允许使用集合初始化器
    var z = null;        // 错误,不允许出现空类型
    像这样也是不允许的
    var a= 10;
    a= "james";
    来看看隐私类型的IL实现。
    c#2.0
    .method public hidebysig instance void  oldvar() cil managed
    {
      // 代码大小       8 (0x8)
      .maxstack  1
      .locals init ([0] string name)
      IL_0000:  nop
      IL_0001:  ldstr      "james"
      IL_0006:  stloc.0
      IL_0007:  ret
    } // end of method testvar::oldvar

    c#3.0
    .method public hidebysig instance void  newvar() cil managed
    {
      // 代码大小       8 (0x8)
      .maxstack  1
      .locals init ([0] string name)
      IL_0000:  nop
      IL_0001:  ldstr      "james"
      IL_0006:  stloc.0
      IL_0007:  ret
    } // end of method testvar::newvar
    完全一样。


    我猜想var的出现其实完全是为了配合匿名类型而出现的。

                var a = new { Name = "james" ,Age = 25};
                Console.WriteLine(a.Name);
                Console.WriteLine(a.Age);

    在linq中应用也比较多

    int[] numbers = 5413986720 };
    var queryLowNums 
    =
        from num 
    in numbers
        
    where num < 5
        select num;
    foreach (var s in queryLowNums)
    {
        Console.Write(s.ToString() 
    + " ");
    }

    也就是说对象是匿名类型,或者对象是难以预测的类型的时候。
    像这样的代码var age = 10;还是少写为好,一是类型安全,再是也为代码阅读尽量少造成障碍。
  • 相关阅读:
    笔记一 Redis基础
    (转载)你一定要努力,但千万别着急
    (转载)[jQuery]使用Uploadify(UploadiFive)多文件上传控件遇到的坑
    Redis学习笔记~StackExchange.Redis实现分布式Session
    转载 mvc中 将session保存到redis中 实现共享session
    webconfig配置信息转发
    2019.9.25-二分查找代码(递归和非递归方法)
    2019.9.24-常见排序算法效率比较【图】
    2019.9.24-归并排序(代码)
    2019.9.24-快速排序实现(完整代码)
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/1027994.html
Copyright © 2020-2023  润新知