C#:认识var

var:弱化类型的定义。对于我这种菜鸟来说,很多时候不知道对象需要什么类型的时候,直接一var就o了。因为它能指示编译器根据初始化语句右侧的表达式推断变量的类型。其推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。

《C#高级编程第七版》中在讲到泛型的类型安全的时候,用了下面一个例子:

在一ArrayList类型的集合中添加一个整数、一个字符串和一个MyClass类型的对象;
ArrayList list = new ArrayList();
List.Add(44); 
List.Add("mystring");
List.Add(new MyClass());

现在需要遍历集合中所有的元素。如果集合使用foreach进行迭代,而该foreach语句使用整数元素进行迭代,编译器会编译这段代码,但是会出现运行异常:因为集合中的元素并不能全部强制转换成int,

foreach( int i in list)
{
    Console.WriteLine(i);
}

那么此时就该我们的主角var发挥作用了:

foreach( var i in list)
{
    Console.WriteLine(i);
}

运行,OK,没问题。

当我们单步调试上述代码的时候,发现i的值为44时,它的类型为object{int};当i的值为为mystring的时候,它的类型为object{string};当i的值为{Temp.MyClass}的时候,它的类型为object{Temp.MyClass}.

我们可以发现,编译器自己根据其右侧的表达式推断出了变量i的类型。

 基于var以上的特性,因此我们在使用的时候要注意:

1.初始化时要赋值:
 如var i= 123;
 不能:var i;
      i = 123//编译器需要根据其右边的表达式推断i的类型

2.初始化赋值后,就不能再更改值得类型了:
 var i = 123//i的类型已经确定了为int
 i= "mystring"; //error:无法将类型string隐式转换成int

3.var要求是局部变量。

4.var定义变量和object不同,它在效率上和使用强类型定义方式定义变量完全一样。
原文地址:https://www.cnblogs.com/Alvin-x/p/3285515.html