2012-10-15 60 views
6

我只注意到一種錯誤的功能:Type.GetType不工作

Type.GetType("System.Uri"); 

返回值是零,而下面的功能合作得非常好......

Type.GetType("System.string"); 
Type.GetType("System.bool"); 
Type.GetType("System.DateTime"); 

。 ..

任何人都知道,爲什麼返回的類型爲null?

編輯:刪除的URI複式...

+12

困惑:告訴你的System.Uri在兩個工作和不工作 – BugFinder

+2

我非常驚訝的是'Type.GetType( 「System.string」);'和'Type.GetType(「System.bool 「);'在工作,因爲我不知道這種類型的存在。 –

+0

Darin,string和bool是System命名空間中的類型的快捷方式。 http://msdn.microsoft.com/es-es/library/system.string(v=vs.80).aspx – Oscar

回答

15

之所以Type.GetType("System.Uri")回報null是該類型位於system.dll而不是mscorlib.dll。如上所述,您必須使用裝配限定的名稱。

從MSDN:

的typeName 類型:System

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

+0

這就是解決方案,謝謝! – Daffi

1

Type.GetType(String)

獲取具有指定名稱的類型,執行區分大小寫的搜索。

返回值

類型:System.Type

類型具有指定名稱,若發現;否則爲空。

所以,如果你犯了一個錯字,你的類型將不會被發現和null將被退回。這不是一個錯誤。

1

沒有附加信息,我猜你沒有使用完全限定的類型名稱。 Type.GetType()不僅要求完全限定類型名稱(即System.String),而且還要求assembly-qualified name,以防您嘗試加載除當前正在執行的程序集類型以外的任何其他類型名稱。

+1

我懷疑是這樣。如果你擊中了Type.GetType(「System.Uri」),它將返回null。但是如果你使用'Type.GetType(「System.Uri,System」)'它可以正常工作。 (至少在LinqPad) –

3

試試這個代碼:

Uri uri = new Uri("http://test"); 
Type t = Type.GetType(uri.GetType().AssemblyQualifiedName); 

,然後ü可以複製/從式粘貼AssemblyQualifiedName

另一種方法是:

Type t = typeof(Uri); 
10

我也遇到了這個問題,並意識到,尤其是在ASP.Net與JIT編譯,我並不總是知道大會信息。我在ReflectionUtilities類中添加了以下內容。它在某種程度上是「攻擊堅果的大錘」,但它對AssemblyQualifiedName和基本類FullName均有效。第一個基本上是對CurrentDomainAssemblies的搜索進行短路,否則這些搜索必然會發生。

public static Type FindType(string qualifiedTypeName) 
    { 
     Type t = Type.GetType(qualifiedTypeName); 

     if (t != null) 
     { 
      return t; 
     } 
     else 
     { 
      foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) 
      { 
       t = asm.GetType(qualifiedTypeName); 
       if (t != null) 
        return t; 
      } 
      return null; 
     } 
    } 

注:鑑於反射性能問題,這應該不是內部循環被稱爲無如果在所有可能的裝配資格。更好地訪問您需要的第一個項目,從中提取程序集信息,然後從那裏繼續。並不總是合適但效率更高(如果Reflection中的任何內容可以稱爲高效:-))。

阿利斯泰爾

+0

哇,這是一個非常有用的功能,這是侷促的黃金寶石之一! – Radderz