2013-10-08 55 views
2

我正在編寫一些代碼來動態地創建一些對象(屬於未知類型),我很好奇爲什麼Activator能夠生成類型,但Assembly不是。 下面是一個代碼示例:爲什麼Assembly和Activator對CreateInstance的行爲有所不同

class Program 
{ 
    static void Main(string[] args) 
    { 
     Type t = typeof (int); 
     object notAnInt = Assembly.GetExecutingAssembly().CreateInstance(t.FullName);//does not work 
     object actualInt = Activator.CreateInstance(t);//works 

     Console.WriteLine(notAnInt); 
     Console.WriteLine(actualInt); 
    } 
} 

我的問題是,爲什麼這兩個不同的行爲時,我會想象,他們都應該能夠創建一個int的實例?

+1

**如何**不起作用? – SLaks

回答

6

Assembly.CreateInstance在該程序集中創建類型的實例。

System.Int32未在您的程序集中定義。

要做到這一點,您需要獲取mscorlib的Assembly。例如,您可以編寫typeof(Assembly).Assembly

0

Assembly.GetExecutingAssembly()獲取您的exe或dll(當前正在執行的程序集)。由於Int32在mscorlib中定義,而不是在您的exe或dll中,因此Assembly.GetExecutingAssembly()。CreateInstance()將返回null。要使用CreateInstance獲取int類型的對象,請嘗試下面的代碼:

var intTypeAssembly = Assembly.GetAssembly(t); 
object iAmAnInt = intTypeAssembly.CreateInstance(t.FullName); 
相關問題