问题描述
我们说AnonymousType是C#3.0的新的特性,而没有说AnonymousType是.NETFramework3.5的新特性。这是因为AnonymousType仅仅是.NETProgrammingLanguage和相应的Compiler的新引入的特征。而对于.NETFramework3.5来说,它看不到这和原来有什么不同,对于AnonymousType和一般的NamedType,对于CLR来说他们之间没有什么本质的区别。通过下面这样的一段简单的代码:1varp1=new{Name="IORI",Age=27};然后我们再看看IL:Code1.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged2{3.entrypoint4//Codesize15(0xf)5.maxstack36.localsinit([0]class'<>f__AnonymousType0`2'<string,int32>p1)7IL_0000:nop8IL_0001:ldstr"IORI"9IL_0006:ldc.i4.s2710IL_0008:newobjinstancevoidclass'<>f__AnonymousType0`2'<string,int32>::.ctor(!0,!1)1112IL_000d:stloc.013IL_000e:ret14}//endofmethodProgram::Main15我们再这里就可以看出Compiler将会为p1这个AnonymousType创建一个名为<>f__AnonymousType0`2<string,int32>的类型。参数将根据数据成员的具体结构,这里也是声明一个类型。这个类继承自object,并且重写了ToString()和GetHashCode()的实现。所有的匿名类型自动继承自System.Object,并且重写了Equals(),GetHashCode(),andToString().详细请看这里:
解决方案
解决方案二:
该回复于2008-05-20 18:29:22被版主删除