zoukankan      html  css  js  c++  java
  • C# 3.0新特性系列:隐含类型var

    一.神奇的var

      在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的 var类似,但也有不同。

      1. 相同点,它可以用var来声明任何类型的局部变量。

      2. 不同点,它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。

      二.相同点

      它可以声明

    var integer = 10;
    var name = "edisundong";
    var numbers = new int[] { 1, 2, 3 };

      三.不同点

      var仅仅是一个关键字,它并不是C#3.0中的一种新的类型,而是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,上面的语句相当于

    int integer = 10;
    string name = " edisundong ";
    int[] numbers = new int[] { 1, 2, 3 };

      三.注意点

      1.在声明时必须同时赋值,因为声明依赖于赋值号右边的表达式,如果有下面的语句:

    var integer;
    integer = 10;

      编译时会报Implicitly typed locals must be initialized错误。

      2.在使用var声明一个局部变量后,它仍然具有强类型,可以做如下测试:

    var integer = 10;
    integer = " edisundong ";

      编译时会报Cannot implicitly convert type 'string' to 'int'错误。

      3. 初始化器表达式的编译期类型不可以是空(null)类型,编译器无法根据null来推断出局部变量的类型,如有下面的语句:

    var integer = null;

      编译时会报Cannot assign '<null>' to an implicitly typed local错误。

      4. 初始化语句必须是一个表达式,初始化表达式不能包含它自身,但是可以是包含一个对象或集合初始化器的一个new表达式(即匿名类型)。

      如可以这样去声明:

    var coll = new Hashtable();

      5. var的声明仅限于局部变量,也可以包含在foreach、for、using语句中。下面的使用是错误的:

    class Program
    {
     private var i = 10; //全局私有变量。
     static void Main(string[] args)
     { }
    }

      编译时会报The contextual keyword 'var' may only appear within a local variable declaration错误。
  • 相关阅读:
    【Lintcode】112.Remove Duplicates from Sorted List
    【Lintcode】087.Remove Node in Binary Search Tree
    【Lintcode】011.Search Range in Binary Search Tree
    【Lintcode】095.Validate Binary Search Tree
    【Lintcode】069.Binary Tree Level Order Traversal
    【Lintcode】088.Lowest Common Ancestor
    【Lintcode】094.Binary Tree Maximum Path Sum
    【算法总结】二叉树
    库(静态库和动态库)
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/jes_shaw/p/1507828.html
Copyright © 2011-2022 走看看