使用CodeDom動(dòng)態(tài)生成類(lèi)型
.NET 3.5的時(shí)候加入了匿名類(lèi)型這個(gè)特性,我們可以直接使用 new {name="abc"} 來(lái)直接生成一個(gè)對(duì)象。這個(gè)特性現(xiàn)在應(yīng)用的地方很多,比如dapper的查詢參數(shù)都是用匿名對(duì)象。
其實(shí)匿名對(duì)象也不是真的沒(méi)有名稱,編譯器在編譯后自動(dòng)會(huì)生成一個(gè)Type。我們看看IL就知道了。
編譯器會(huì)自動(dòng)生成一個(gè)叫做<>f__AnonymousType0`1的類(lèi)型。
動(dòng)態(tài)生成類(lèi)型
但是有的時(shí)候我們可能類(lèi)型里面的字段都是不確定的,這個(gè)時(shí)候我們就需要去動(dòng)態(tài)生成一個(gè)類(lèi)型了。
- 動(dòng)態(tài)生成類(lèi)型第一個(gè)想到的就是反射,但是仔細(xì)想想反射都是基于現(xiàn)有Type的基礎(chǔ)上完成的,咱們現(xiàn)在連Type都沒(méi)有,所以這條路不通。
- 第二個(gè)dynamic,dynamic確實(shí)是個(gè)好辦法,可以動(dòng)態(tài)指定字段的名稱,但是有的三方的庫(kù)不支持比如dapper。
-
最后CodeDom,CodeDom可以在運(yùn)行時(shí)直接生成一個(gè)Type。CodeDom生成Type主要分成3步。
比如我們要生成一個(gè)Person類(lèi):public class Person { public string name; public ing age; public Person(string name ,int age) { this.name = name; this.age = age; } }
構(gòu)造類(lèi)型
private string _ns = "__x";
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26