.NET 3.5的時候加入了匿名類型這個特性,我們可以直接使用 new {name="abc"} 來直接生成一個對象。這個特性現(xiàn)在應(yīng)用的地方很多,比如dapper的查詢參數(shù)都是用匿名對象。
其實匿名對象也不是真的沒有名稱,編譯器在編譯后自動會生成一個Type。我們看看IL就知道了。
photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)
編譯器會自動生成一個叫做<>f__AnonymousType0`1的類型。

動態(tài)生成類型

但是有的時候我們可能類型里面的字段都是不確定的,這個時候我們就需要去動態(tài)生成一個類型了。

  • 動態(tài)生成類型第一個想到的就是反射,但是仔細(xì)想想反射都是基于現(xiàn)有Type的基礎(chǔ)上完成的,咱們現(xiàn)在連Type都沒有,所以這條路不通。

  • 第二個dynamic,dynamic確實是個好辦法,可以動態(tài)指定字段的名稱,但是有的三方的庫不支持比如dapper。

  • 最后CodeDom,CodeDom可以在運行時直接生成一個Type。CodeDom生成Type主要分成3步。
    比如我們要生成一個Person類:

    public class Person{public string name;public ing age;public Person(string name ,int age){    this.name = name;    this.age = age;
    }
    }

    構(gòu)造類型

        private string _ns = "__x";    private string _className;    private Dictionary<Type, string> _fieldsDictionary;    private string _sourceCode;    private CodeCompileUnit _targetUnit;    private CodeTypeDeclaration _targetClass;    public SourceCodeCreater(string cla
            
    		

    網(wǎng)友評論