C#中的匿名类型

// 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 }; 

 // ano is compiled as an anonymous type var ano = new { x1 = 10, y1 = "Hello" }; 

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

编辑:

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

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

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

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

匿名类型是immutable ,即无法更改。

什么是不可变类型?

Eric Lippert的博客

有趣的声明来自这里 。 这里有一个替代方案。

… [B]确保成员不会更改,我们确保哈希在对象的生命周期内是常量。这允许匿名类型与哈希表之类的集合一起使用,而在修改成员时实际上不会丢失它们。 不可变性有很多好处,它大大简化了使用对象的代码,因为它们只能在创建时分配值然后才被使用(想想线程)