2012-01-18 61 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