命名类型可以通过两种方式消耗内存。
第一路
public MyAdd MyFunc()
{
return new MyAdd
{
name = "Mike",
Address = "MyTown"
};
}
var x = MyFunc();
第二路
x = new { name = "Mike", Address = "MyTown" };
这两种说法的区别在于,在前者和在以后的情况下可以修改。
我的问题是,在这两种情况下,最终一个命名类型都消耗了一些值,那么为什么在在结构的情况下,它不是只读的。这里面有什么机制吗?
不,在第一种情况下,您没有使用匿名类型。第一个代码相当于:
var tmp = new MyAdd();
tmp.name = "Mike";
tmp.Address = "MyTown";
return tmp;
没有引入额外的类型。我知道看起来类似于匿名对象创建表达式或无名氏对象初始值设定项的语法(这些是规范使用的术语),但它实际上只是使用现有类型。这只是一个使用对象初始值设定项的对象创建表达式——这里没有匿名的内容。
有关更多信息,请参见C#4规范的第7.6.10.1节和第7.6.10.2节。