2010-07-31 53 views
0

我想打電話給的GetType在.NET反射不起作用

Type.GetType("System.Diagnostics.TraceFilter") 

沒有typeof運算(System.Diagnostics.TraceFilter)

但結果總是空。任何人都可以幫我嗎?如何獲得這個抽象類的類類型?

回答

6

從文檔Type.GetType(字符串的typeName)

類型的程序集限定名稱來獲得。請參閱AssemblyQualifiedName。如果該類型位於當前正在執行的程序集或Mscorlib.dll中,則只需提供由其名稱空間限定的類型名即可。

類型您正在釣魚周圍(即「System.Diagnostics.TraceFilter」)不是在當前正在執行的組件或「的Mscorlib.dll」,它實際上是在「System.dll中」。因此,你必須使用完全合格的組件名稱,例如:

Type type = Type.GetType("System.Diagnostics.TraceFilter, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); 

或者您可以使用:

Type type = typeof(System.Diagnostics.TraceFilter); 
2

這可能是因爲您必須提供裝配限定的名稱。

更好,不過,將改用此:

typeof(System.Diagnostics.TraceFilter) 
+0

的想法是得到任何類類型的對象。我想在這種情況下使用反思。它的組件是System。因此,默認情況下Type.GetType應該理解它在哪裏。 – 2010-07-31 15:47:30

+0

你能解釋一下你試圖解決的更一般問題是什麼?可能有一種方法可以使用typeof()和泛型來代替字符串。 – siride 2010-07-31 15:56:07

1

MSDNType.GetType(string)需要程序集限定名稱,除非目標類型爲在當前正在執行的程序集或mscorlib.dll中。 System.Diagnostics.TraceFilter在System.dll中,這意味着您必須使用程序集限定的名稱。

0

有時即使正確的程序集已加載,您也無法像預期的那樣使用反射。 使用MEF或Unity等注入框架時經常會發生這種情況。 如果typeof運算()運算符是不是一種選擇和Type.GetType()失敗,那麼這個功能通常做的伎倆:

public static Type GetTypeEx(string fullTypeName) 
{ 
Type type = Type.GetType(fullTypeName); 
if (type != null) 
    return type; 

foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    Type t2 = assembly.GetType(fullTypeName); 
    if (t2 != null) 
     return t2; 
} 
return null; 
}