在上一节中我们学习了如何显示的定义变量
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;
void Display(var param) //编译错误
{
Console.Write(param);
}
for(var i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
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了。
在c#9.0之后我们还可以用 new()
var xs = new List<int>();
// 下面的这种方式也行
List<int> xs = new();