匿名类型可以通过两种方式消耗内存。
第一种方式
public MyAdd MyFunc()
{
return new MyAdd
{
name = "Mike",
Address = "MyTown"
};
}
var x = MyFunc();
第二种方式
x = new { name = "Mike", Address = "MyTown" };
这两个陈述的不同之处在于c.name在前者和前者的情况下是只读的 在以后的情况下可以修改。
我的问题是,在这两种情况下,最后一个匿名类型消耗了一些值,所以为什么在 结构的情况它不是只读的。这有什么内部机制吗?
答案 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节。