C#3.0允许将new和一个匿名对象初始化器一起来创建一个匿名类型的对象。具体语法格式为:
匿名对象创建表达式:
new 匿名对象初始化器
匿名对象初始化器:
{成员声明器列表}
成员声明器列表:
成员声明器
成员声明器列表,成员声明器
成员声明器:
简单名称
成员访问
标识符=表达式(赋值表达式)
注:简单名称就是已经定义在当前范围可访问的标识符(变量名)。成员访问就是通过“.”分割的表达式。
实例:
Rectangle r = new Rectangle() { P1 = { X = 5, Y = 6 }, P2 = { X = 7, Y = 8 } };
//匿名类型包含Name和P1两个只读成员
var anyType = new { Name = "Hello, r.P1}; //r对象的成员访问
//匿名类型包含r和i两个只读成员
var testType = new { r, i = 0 };//r对象简单名称
注意:
1 匿名类型中的成员都是只读的。
2 成员的类型根据赋值表达式来推导出实际类型(赋值表达式在编译时不能为null),
不能在代码中指定成员类型。
3 如果两个匿名类型创建表达式的成员变量名相同,并且经过推导出的变量的
类型和顺序也相同,那么这两个匿名类型对象是两个同一匿名类型的实例,
例如:
var p1 = new { Name = "Lawnmower", Price = 495.00 };
var p2 = new { Name = "Shovel", Price = 26.95 };
p1 = p2;