繁体   English   中英

C#中的匿名类型

[英]Anonymous Types in 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语言添加它们的主要情况是LINQ的引入,它在产生匿名类型的情况下不需要可变性。 通常,不可变类倾向于给设计者较少的问题,尤其是在涉及并发时,因此语言的设计者决定使用不可变的匿名类型。

匿名类型是immutable ,即不能更改。

什么是不可变类型?

埃里克·利珀特(Eric Lippert)的博客

这里有趣的说法。 这里找到替代方法。

... [B]通过确保成员不变,我们确保哈希在对象的生命周期中是恒定的。这允许匿名类型与哈希表(如哈希表)一起使用,而在修改成员时不会丢失它们。 不变性有很多好处,它极大地简化了使用对象的代码,因为只有在创建对象之后才可以为其分配值,然后才使用它们(请考虑线程化)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM