超级实用的一种类型——匿名类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超级实用的一种类型——匿名类型相关的知识,希望对你有一定的参考价值。

既然说到匿名范例超等适用,得要找到场景来压服一下,假如人人玩过php,外面有一个全能的联系关系数组array,任你在联系关系数组array外面怎样写,均可以或许用json_encode来天生json,异常异常的便利。
http://www.top388.com/jianzhanjingyan/20160715103844.html


看到如许的json是不是有一种很爽的感到?是的,确其实咱们开辟中异常的适用,那末成绩来了,这么适用器械,它的道理在哪里可以或许学获得?


不看IL还好,一看真是吓一跳,就一句话的工作,酿成IL后就有这么多的玩意。。。并且类名获得也是异常奇葩,开首竟然有<>这类尖括号,固然这么写的缘故原由很简略,便是防止咱们界说的类名与自动天生的相抵触,再说编译器也不容许用<>开首的类名,固然在CLR层面是容许的,好了,


咱们继承往上面,从IL上咱们还发明了
http://www.020nfnk.com/xin2/2003.html


两个模板参数:<Age>j__TPar 和 <Name>j__TPar。


两个字段:<Age>i__Field 和<Name>i__Field。


两个属性办法:get_Name和get_Age,这里咱们发明并无set_Name和set_Age办法,也就阐明该属性是个只读属性。可以或许看到,当范例中有泛型参数的参加,IL代码就变得异常丢脸并且轻易混杂,不外可以或许找到几个症结指令,在重写object的equals办法以后,


匿名范例中比拟相称的办法是采纳一一字段比拟的,这就跟值范例的比拟方法很相似了,既然是一一比拟,那末上面的两个匿名工具应该是相称的。


这个在援用范例中是不可想象的。


不外风趣的是,这时咱们再来看看IL代码,发明并无天生两个匿名类,而是json和json2专用一个匿名类,这个利益便是削减了IL的指令量,


可以或许说编译器照样异常智能的,可以或许将资本优化到最好。

以上是关于超级实用的一种类型——匿名类型的主要内容,如果未能解决你的问题,请参考以下文章

匿名方法

用于检查匿名类型的JSON字符串的C#泛型实用程序

C#编程(十六)----------匿名类型

Linq专题之提高编码效率—— 第二篇 神一样的匿名类型

使用 lambda 而不是显式匿名内部类时的不同泛型行为

当其中一种数据类型可以为空而另一种不能为空时,是不是可以使用 linq 进行匿名连接? [复制]