1隐含类型的局部变量
var i=5;
var h=23.56;
var s="Cshap"
var intarr=new[]{1,2,3};
var 为关键字,可以根据后边的初始化语句自动推断类型,初始化语句必须为表达式,切编译时可以推断类型。var声明仅仅局限于局部变量,亦可以用于foreach,using等语句。数组也可以作为隐含类型。这里面var 编译的的时候根据后边表达式的类型生成相对应的类型局部变量,比如 i 为int类型 而不是生成object 的弱类型,所以这边var 依然为强类型。 var 其实这里不是个类型,我们可以理解为一个占位符,编译期间,编译器就会 把他替换成一个具体的类型而且是一个强类型。表达式不能为null,也就是说 不能直接写成var i=null;因为编译器不能推断出null的类型,编译错误,当然也不能直接写 var s(后边没有表达式)。
foreach(var i in array)array为数组,编译时候 i的类型为当前遍历到的元素的类型(强类型)
2扩展方法
3对象与集合初始化器
public class Point()
{
private int x;
public int X
{
get{ return x;}
set{ x=value;}
}
}
var a=new Point();相当于var a=new Point{X=1}
几个初始化器、
List<int> list=new List<int>{1,2,3,4,5};
4匿名类型
var a=new {name="123",pwd="123"}
编译器可以推断出任何问题 比如推断出类型的属性,一个是name ,一个是pwd,(还有编译器自动生成的字段(保存属性值))
编译相当于替我们生成类型比如:
class SomeType
{
//字段
private string _name;
private string _pwd;
//属性
public string name {get set}
public string pwd {get set}
}
SomeType 这里只是随便写,也不知道编译器生成个什么名字,SomeType直接继承与object
匿名类型直接继承System.Object
匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。不用声明其中字段或属性的类型,由编译器推断而出。
匿名类型适合局部内使用。不合适在各个地方穿梭。
5Lambda表达式
6查询表达式(LINQ)
7表达式树