2012-02-14 71 views
15
Type.GetType("TheClass"); 

返回null如果namespace不存在這樣的:避免在Type.GetType(給予命名空間名稱)

Type.GetType("SomeNamespace.TheClass"); // returns a Type object 

有什麼辦法,以避免給namespace名字?

+4

您是否意識到,您可以在項目中添加多個名爲TheClass的多個不同的類,其中添加了許多引用,並且嘗試解析類型的文件有很多使用語句?您應該傳遞完全限定名稱,包括命名空間,就像您在寫入名字和姓氏的文檔中引用自己時一樣。編譯器在許多TheClass類中應該使用哪個類以防出現多個類?命名空間告訴哪一個。 – 2012-02-14 08:20:08

+0

我會拋出'ArgumentException'而不是僅僅返回'null'。你不能區分沒有'命名空間' – gdoron 2012-02-14 08:26:39

+0

可能重複[從類型的部分名稱獲取System.Type](http://stackoverflow.com/questions/179102/getting-a-system-type-from-types-partial -name) – nawfal 2014-08-19 07:35:09

回答

-1

這是方法期望得到的參數,所以不是。你不能。

typeName:由其名稱空間限定的類型名稱。

MSDN

你怎麼能指望具有相同名稱但不同的命名空間兩個類之間的區別?

namespace one 
{ 
    public class TheClass 
    { 
    } 
} 

namespace two 
{ 
    public class TheClass 
    { 
    } 
} 

Type.GetType("TheClass") // Which?! 
+0

根據我的需要,沒有像這樣的情況。 – 2012-02-14 08:27:29

+0

根據我的需要,不會有這樣的情況。所以在那種情況下我該怎麼辦呢? – 2012-02-14 08:27:37

+4

@NIleshLanke,我希望你認識到,微軟並沒有根據你的**需求設計.NET框架,而是將它設計爲用於更廣泛的場景。例如,在兩個不同名稱空間中具有相同類名的情況。 – 2012-02-14 08:45:31

39

我使用的是搜索所有加載Assembly■對於Type匹配指定名稱的helper方法。即使在我的代碼中只有一個類型結果是預期的,它支持多個。我驗證每次使用它時只返回一個結果,並建議您也這樣做。

/// <summary> 
/// Gets a all Type instances matching the specified class name with just non-namespace qualified class name. 
/// </summary> 
/// <param name="className">Name of the class sought.</param> 
/// <returns>Types that have the class name specified. They may not be in the same namespace.</returns> 
public static Type[] getTypeByName(string className) 
{ 
    List<Type> returnVal = new List<Type>(); 

    foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     Type[] assemblyTypes = a.GetTypes(); 
     for (int j = 0; j < assemblyTypes.Length; j++) 
     { 
      if (assemblyTypes[j].Name == className) 
      { 
       returnVal.Add(assemblyTypes[j]); 
      } 
     } 
    } 

    return returnVal.ToArray(); 
} 
+19

+1回答這個問題,而不是堆在上面的火焰戰爭。 – 2013-08-29 18:49:48

+2

另一個答案,是從誰知道,而不是不使用命名空間bla bla :) ty的答案 – MonsterMMORPG 2016-03-01 10:52:49

+0

太棒了,做它說什麼。我會添加到這個主要的事情是使用assemblyTypes [j] .Name.EqualsIgnoreCase(className)。 – sirthomas 2017-02-09 01:04:59

相關問題