C# 4.0 匿名变量只读情况
annonymous类型可以通过两种方式消耗内存 第一条路C# 4.0 匿名变量只读情况,c#-4.0,C# 4.0,annonymous类型可以通过两种方式消耗内存 第一条路 public MyAdd MyFunc() { return new MyAdd { name = "Mike", Address = "MyTown" }; } var x = MyFunc(); x = new { name = "Mike", Address
public MyAdd MyFunc()
{
return new MyAdd
{
name = "Mike",
Address = "MyTown"
};
}
var x = MyFunc();
x = new { name = "Mike", Address = "MyTown" };
第二种方式
public MyAdd MyFunc()
{
return new MyAdd
{
name = "Mike",
Address = "MyTown"
};
}
var x = MyFunc();
x = new { name = "Mike", Address = "MyTown" };
这两条语句的区别在于,对于前者和后者,c.name是只读的
在以后的情况下可以修改
我的问题是,在这两种情况下,最终一个annonymous类型消耗了一些值,那么为什么在
对于结构,它不是只读的。是否存在任何内部机制?不,在第一种情况下,您没有使用匿名类型。第一个代码相当于:
var tmp = new MyAdd();
tmp.name = "Mike";
tmp.Address = "MyTown";
return tmp;
没有引入额外的类型。我知道它看起来像匿名对象创建表达式或匿名对象初始值设定项的语法(这些是规范使用的术语),但它实际上只是使用现有类型。这只是一个使用对象初始值设定项的对象创建表达式-这里没有匿名项
有关更多信息,请参见C#4规范第7.6.10.1节和第7.6.10.2节。否,在第一种情况下,您没有使用匿名类型。第一个代码相当于:
var tmp = new MyAdd();
tmp.name = "Mike";
tmp.Address = "MyTown";
return tmp;
没有引入额外的类型。我知道它看起来像匿名对象创建表达式或匿名对象初始值设定项的语法(这些是规范使用的术语),但它实际上只是使用现有类型。这只是一个使用对象初始值设定项的对象创建表达式-这里没有匿名项
有关更多信息,请参见C#4规范第7.6.10.1节和第7.6.10.2节。我第一次看到它不是匿名类型……它是MyAdd类型。因为它不是匿名类型,所以可以设置值和属性。我第一次看到它不是匿名类型…它是MyAdd类型。因为它不是匿名类型,所以您可以设置值和属性。请共享上面提到的链接sections@StackOverflowUser:该规范不是以一种特别有用的形式在线的,可以很容易地链接到它,但是你可以下载它:(我在@PankajGarg上保存了一个带有链接的规范列表)@PankajGarg:有什么理由不接受它吗?有更多的信息我可以帮助你吗?请分享上面提到的链接sections@StackOverflowUser:该规范不是以一种特别有用的形式在线的,可以很容易地链接到它,但是你可以下载它:(我在@PankajGarg上保存了一个带有链接的规范列表)@PankajGarg:有什么理由不接受它吗?还有什么我可以帮你的吗?