2009-09-03 15 views

回答

4

Type t = Type.GetType("Class1");會做到這一點。

從MSDN: 「的時候,公共語言運行時是無法確定可以創建所請求的類型的組件時發生TypeResolve事件,如果該類型在動態組件限定,或類型不是這可以發生在動態程序集中定義,但運行時不知道類型是在哪個程序集中定義的。當使用類型名稱調用Type .. ::。GetType時,會出現後一種情況,該程序名稱不符合程序集名稱。

+0

愚蠢的我,在我的測試中,我使用了完全限定的類型名稱。真是愚蠢。 – mark 2009-09-03 19:54:45

+0

呵呵。我總是犯這類錯誤。 – dkackman 2009-09-03 23:21:21

0

MSDN是在引發此事件上很清楚:當公共語言運行時無法確定,可以創建所請求類型的程序集發生

的TypeResolve事件。如果類型是在動態程序集中定義的,或者類型未在動態程序集中定義,但運行時不知道類型定義在哪個程序集中,則會發生這種情況。當使用a調用Type.GetType時會發生後一種情況鍵入不符合程序集名稱的名稱。

此代碼將觸發事件:

AppDomain.CurrentDomain.TypeResolve += delegate(object sender, ResolveEventArgs e) 
{ 
    Console.WriteLine("Trying to resolve '{0}'", e.Name); 
    return null; 
}; 

Type type = Type.GetType("SomeNamespace.SomeTypeWithoutAssemblyQualifier"); 
0

AppDomain.TypeResolve事件將觸發您請求類型,可以默認情況下不解決任何時候。通常情況下,這不會發生,因爲您的依賴關係始終與您的可執行文件(默認情況下)或GAC中的位置相同。

但是,很容易迫使它發生。只要這樣做:

Type badType = Type.GetType("IDontExist"); 

由於類型不存在,它會調用事件以嘗試「查找」類型。

相關問題