C#中的匿名类型

Thi*_*a H 11 c# var anonymous-types

// x is compiled as an int 
var x = 10;

// y is compiled as a string 
var y = "Hello";

// z is compiled as int[] 
var z = new[] { 0, 1, 2 };
Run Code Online (Sandbox Code Playgroud)

// ano is compiled as an anonymous type 
var ano = new { x1 = 10, y1 = "Hello" };
Run Code Online (Sandbox Code Playgroud)

ano创建的对象属性是只读的.我想弄清楚为什么这些属性是只读的.建议表示赞赏?

编辑:

var ano1 = new { x1 = 10, y1 = "Hello" };

var ano2 = new { x1 = 10, y1 = "Hello" };
Run Code Online (Sandbox Code Playgroud)

如果新的匿名类型具有相同顺序的相同数量和类型的属性,它是否与第一个类型具有相同的内部类型?

das*_*ght 14

var并不意味着"使用匿名类型",它意味着"编译器,为我找出类型!".在前三种情况下,类型实际上是一个"命名"类型 - System.Int32,System.StringSystem.Int32[](在最后一种情况下,数组的元素类型也是由编译器根据放在初始化程序中的数组元素的类型推导出来的).

最后一种情况是唯一使用匿名类型的情况.根据设计,C#的匿名类型是不可变的.首先在语言中添加它们的主要情况是引入LINQ,在生成匿名类型的情况下不需要可变性.通常,不可变类往往会给设计人员带来更少的问题,特别是在涉及并发时,因此该语言的设计者决定使用不可变的匿名类型.