C# 隐式变量(var)

在C#中,变量必须使用数据类型声明。这些称为显式类型变量。

int i = 100;// 显式变量

C#3.0引入了var关键字来声明方法级变量,而无需显式指定数据类型。                    

var j = 100; // 隐式类型的局部变量

编译器将从=运算符右侧的表达式中推断出变量的类型。上面,var将编译为int。

以下从表达式推断类型。

int i = 10;
var j = i + 1; // 编译为int

var可用于声明任何内置数据类型,用户定义类型或匿名类型变量。下面的示例显示C#编译器根据该值推断类型:        

static void Main(string[] args)
{
    var i = 10;
    Console.WriteLine("Type of i is {0}", i.GetType());

    var str = "Hello World!!";
    Console.WriteLine("Type of str is {0}", str.GetType());

    var dbl = 100.50d;
    Console.WriteLine("Type of dbl is {0}", dbl.GetType());

    var isValid = true;
    Console.WriteLine("Type of isValid is {0}", isValid.GetType());

    var ano = new { name = "Steve" };
    Console.WriteLine("Type of ano is {0}", ano.GetType());

    var arr = new[] { 1, 10, 20, 30 };
    Console.WriteLine("Type of arr is {0}", arr.GetType());

    var file = new FileInfo("MyFile");
    Console.WriteLine("Type of file is {0}", file.GetType());

}

隐式类型的变量必须在声明时进行初始化;否则,C#编译器会给出错误:必须初始化隐式类型的变量。

var i; // 编译时错误:必须初始化隐式类型的变量
i = 100;

var不允许在单个语句中多次声明变量。

var i = 100, j = 200, k = 300; // 错误:无法在单个语句中声明var变量//以下内容也有效var i = 100; 
var j = 200; 
var k = 300;

var 不能用于函数参数。

void Display(var param) //编译时错误
{
    Console.Write(param);
}

var 可以在for和foreach循环中使用。

for(var i = 0; i < 10; i++)
{    Console.WriteLine(i);
}

var 也可以与LINQ查询一起使用。

// 字符串集合
IList<string> stringList = new List<string>() { 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Learn C++",
    "MVC Tutorials" ,
    "Java" 
};

// LINQ查询语法
var result = from s in stringList
            where s.Contains("Tutorials") 
            select s;