在C# 3.0中提供了隐式类型var。隐式类型并不是一种真正意义上的数据类型,只是在声明变量或对象时,提供的一种”简写“语法。比如

var i = 5;

这时变量i的数据类型由等号后面的值决定,编译器很聪明,会根据等号后面的表达式的值推出变量的类型。

var i = 5;
 
 Console.WriteLine($"i={i} , type={i.GetType()}");
 
  
 
 var j = "hello";
 
 Console.WriteLine($"j={j} , type={j.GetType()}");

输出结果

i=5 , type=System.Int32
j=hello , type=System.String

var虽然可以给程序员在编写代码时提供便利,但是C#不推荐乱用这一语法,如果能写明一个对象的类型时,尽量写清楚,例如上面的代码应写成

int i = 5;
 
 string j = "hello";

只有在不得不用var的情况下,才使用它。

下列限制适用于隐式类型的变量声明:

  • 只有在同一语句中声明和初始化局部变量时,才能使用 var;不能将该变量初始化为 null、方法组或匿名函数。
  • 不能将 var 用于类范围的域。
  • 由 var 声明的变量不能用在初始化表达式中。 换句话说,此表达式是合法的 : int i = (i = 20);,但此表达式会产生编译时错误:var i = (i = 20);
  • 不能在同一语句中初始化多个隐式类型的变量。
  • 如果范围中有一个名为 var 的类型,则 var 关键字将解析为该类型名称,而不作为隐式类型局部变量声明的一部分进行处理。

使用 var 确实可能使其他开发人员更加难以理解您的代码。 因此,C# 文档通常仅在需要时才使用 var。

——重庆教主 2024年1月21日