2012-01-18 39 views
1

一種annonymous類型可以以兩種方式消耗存儲器。匿名變量只讀情況

第一種方式

public MyAdd MyFunc() 
     { 
      return new MyAdd 
      { 
       name = "Mike", 
       Address = "MyTown" 
      }; 
     } 


var x = MyFunc(); 

第二種方式

x = new { name = "Mike", Address = "MyTown" }; 

在這兩個聲明的不同之處在於c.name是隻讀的,在前者的情況下和 是modifyable在後面案件。

我的問題是,在這兩種情況下,最後一個匿名類型正在消耗一些值,所以爲什麼在結構的情況下它不是隻讀的。有沒有這方面的內部機制?

+0

我在第一次看到這樣它不是一個匿名類型......這是MyAdd類型。由於它不是匿名類型,因此可以設置值和屬性。 – 2012-01-18 07:11:55

回答

1

不,你的第一個情況下,你是不是使用匿名類型。第一個代碼相當於:

var tmp = new MyAdd(); 
tmp.name = "Mike"; 
tmp.Address = "MyTown"; 
return tmp; 

沒有引入額外的類型。我知道它看起來類似匿名對象創建表達式的語法匿名對象初始化程序(這些是規範使用的術語),但它實際上只是使用現有的類型。這只是一個使用對象初始化器的對象創建表達式 - 這裏沒有任何匿名。

見章節7.6.10.1和C#4規範以獲取更多信息的7.6.10.2。

+0

請分享鏈接,上述部分 – Pankaj 2012-01-18 10:33:29

+0

@StackOverflowUser:該規範是不是在網上可以很容易地連接一個特別有用的形式,但你可以下載它:http://download.microsoft.com/download/ 0/B/d/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSHARP%20Language%20Specification.doc(I跟上鍊接規範列表在http://csharpindepth.com/Articles/Chapter1/Specifications.aspx) – 2012-01-18 10:34:50

+0

@PankajGarg:有什麼理由不接受?有更多的信息可以幫助你嗎? – 2012-03-22 19:43:25