我想打電話給的GetType在.NET反射不起作用
Type.GetType("System.Diagnostics.TraceFilter")
沒有typeof運算(System.Diagnostics.TraceFilter)
但結果總是空。任何人都可以幫我嗎?如何獲得這個抽象類的類類型?
我想打電話給的GetType在.NET反射不起作用
Type.GetType("System.Diagnostics.TraceFilter")
沒有typeof運算(System.Diagnostics.TraceFilter)
但結果總是空。任何人都可以幫我嗎?如何獲得這個抽象類的類類型?
從文檔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);
這可能是因爲您必須提供裝配限定的名稱。
更好,不過,將改用此:
typeof(System.Diagnostics.TraceFilter)
據MSDN,Type.GetType(string)
需要程序集限定名稱,除非目標類型爲在當前正在執行的程序集或mscorlib.dll中。 System.Diagnostics.TraceFilter
在System.dll中,這意味着您必須使用程序集限定的名稱。
有時即使正確的程序集已加載,您也無法像預期的那樣使用反射。 使用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;
}
的想法是得到任何類類型的對象。我想在這種情況下使用反思。它的組件是System。因此,默認情況下Type.GetType應該理解它在哪裏。 – 2010-07-31 15:47:30
你能解釋一下你試圖解決的更一般問題是什麼?可能有一種方法可以使用typeof()和泛型來代替字符串。 – siride 2010-07-31 15:56:07