C#中的匿名类型

时间:2013-09-15 18:54:20

标签: c# anonymous-types var

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

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

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:1)

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

What is an immutable type?

Eric Lippert's Blog

答案 2 :(得分:1)

来自here的有趣陈述。找到了另一种选择here

  

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

相关问题