一、C# 匿名对象概念
匿名类:没有命名的类,不需要定义,也是继承自object。
匿名对象:new 出来的匿名类的对象,没有固定类型的对象。
变量声明,必须指定类型,没有指名类型就是匿名类型。所有的对象继承自object类,也可以说是object类型。
语法规则:
new { ID=1,Name=""}
二、C# 匿名对象的使用场景
1.使用object 声明
object student2 = new
{
ID = 2,
Name = "李四",
Age = 20
};
2. 使用 var 声明
var student = new
{
ID = 1,
Name = "张三"
};
3.使用dynimac 声明
dynamic student3 = new
{
ID = 3,
Name = "王五"
};
student3.Age = 30;
4.匿名对象 和 Linq 搭载
//匿名对象 和 Linq
int[] nums = new int[] { 1, 2, 3 };
var studentList = nums.Select(q => new
{
ID = q,
Name = "姓名" + q
});
三、var 类型 和dynamic 类型的区别
var的特点:
1、var 仅能声明方法内的局部变量
2、var 声明的变量在被赋值后类型即确定下了,后续程序中不能在赋其他类型的值
dynamic的特点:
1、dynamic 表示动态类型,动态类型的含义就是 程序编写、编译阶段 类型不确定,在Runtime时再通过反射机制确定相关对象的属性或方法。因此编写阶段不会进行语法检测。
2、dynamic 可用来声明 字段、属性、方法参数、方法返回值
3、dynamic 不支持智能提示,因为你写代码时 dynamic 是什么没法知晓(反射)
dynamic 声明的变量,可理解为 object 类型变量。所以给dynamic变量赋任何类型值都正确,但在使用变量来取得某个属性值或调用某方法时(此时程序肯定处于Runtime状态),CLR会检查(反射)所调用的属性或方法是否存在,不存在报运行时异常。
var 和 dynamic 看似功能类似,但它们是不同的:
var | dynamic | |
声明字段 | × | √ |
局部变量 | √ | √ |
方法参数类型 | × | √ |
方法返回值类型 | × | √ |
更多: