C# 隐式类型 var 关键字 implicit typed var

在上一节中我们学习了如何显示的定义变量

int i = 100;

在c#3.0之后,还有一个新的关键字 var,可以用来定义变量

var i = 100;

这个i还是强类型的变量。 编译器会在编译的时候进行类型推断。 i 这个变量会被当作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; // 编译错误: 隐式类型化的变量必须已初始化 Implicitly-typed variables must be initialized
i = 100;

不允许使用一个var 定义多个变量

var i = 100, j = 200, k = 300; // Error: 隐式类型化的变量不能有多个声明符
// cannot declare var variables in a single statement


//下面的这种方式是允许的
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的查询当中

var stringList = new List<string>() { 
    "C# 教程",
    "VB.NET 教程",
    "Learn C++",
    "MVC 教程" ,
    "Java" 
};

// Linq 查询语法,(跟Sql是很象的)
var result = from s in stringList
            where s.Contains("教程") 
            select s;

特别是在linq查询当中如果返回类型是匿名类型的时候,哪只能用var了。

new()

在c#9.0之后我们还可以用 new()

var xs = new List<int>();
// 下面的这种方式也行
List<int> xs = new();
最近更新的
...