匿名变量只读案例

时间:2012-01-18 07:08:38

标签: c#-4.0

匿名类型可以通过两种方式消耗内存。

第一种方式

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


var x = MyFunc();

第二种方式

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

这两个陈述的不同之处在于c.name在前者和前者的情况下是只读的 在以后的情况下可以修改。

我的问题是,在这两种情况下,最后一个匿名类型消耗了一些值,所以为什么在 结构的情况它不是只读的。这有什么内部机制吗?

1 个答案:

答案 0 :(得分:1)

不,在您的第一种情况下,您使用匿名类型。第一个代码相当于:

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

没有引入额外的类型。我知道看起来就像 anonymous-object-creation-expression 匿名对象初始化程序的语法(这些是规范使用的术语)但它实际上只是使用现有的类型。这只是一个使用对象初始化程序的对象创建表达式 - 这里没有任何匿名。

有关详细信息,请参阅C#4规范的7.6.10.1和7.6.10.2节。