匿名类型与匿名对象

var 匿名类型(推断类型)
VAR可代替任何类型,编译器会根据上下文来判断你到底是想用什么类型,类似 OBJECT,但是效率比OBJECT高点。
        我们可以赋予局部变量推断“类型”var而不是显式类型。var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。  
如:
var a =1 ;
//IDE或编译器会根据你给a 的值:1,来"推论,断定"a是一个整数类型.

//同理:
var b ="2";
//因为给b的值是"2"这样一个字符串,所以,b就是string类型...

匿名类型在声明之时必须初始化,不允许“var a”,,初始化之后的变量的类型不允许再进行修改;


匿名类型(对象)
匿名类型是指没有类型名(类型一般是指类)的类型,因为没有一个关键字去记录这个类型,所以匿名类型在声明的同时就需要实例化
匿名类型纯粹的c#的语言特性,不是运行时的新类型
格式1:
var v=new{字段1=值;类型字段2=值;...};
例如:
var v=new{a=1,b="good"};
另外,匿名类型的成员还可以是已经声明的变量或者其他对象的成员,
格式2:
var v=new{变量1,变量2,...};
这种方式的声明会将变量名直接复制给匿名类型的成员名,例如:
var v=new{a=1,b="good"};
var w=new{v.a,v.b};
这种声明的方式完全等价于
var v=new{a=1,b="good"};
var w=new{a=v.a,b=v.b};
用处:
1、在一个较大的程序程序中,只有一处或很少几处(不超过3处)需要用到 某个或某些类型(如上 Student),其他地方不再需要这些类型。单独声明一个Student类型,所需代码量,可能超过使用该类型时的代码量,投入产出比不划算。
        最典型的例子就是Linq语句中的Select方法,返回任意T类型的集合,这里就可以用到匿名类型,避免重新声明类
2、在一处程序中,只需要某种类型对象的部分属性或方法参与运算。在这种情况下将该类型对象临时转换为程序所需的部分属性和方法的对象,可使程序更加精简。






posted @ 2020-12-15 18:04  章校长  阅读(119)  评论(0编辑  收藏  举报