簡體   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