2017-04-17 176 views
0

我有一個代碼庫,我與工作看起來像下面返回類型

using namespace.scenario1; 
... 
using namespace.scenarion; 

internal static Type GetType(string typeName) 
{ 
    switch(typeName) 
    { 
    case "class1": return typeof(class1); // namespace.scenario1.class1 
    ... 
    case "classn": return typeof(classn); 
    } 
} 

每次我想支持一個新的類我要補充一個使用陳述和新的案例陳述,它真的覺得這可以自動化。

我試圖像下面的一種方法,但它有時會返回空值

internal static Type GetType(string typeName) 
{ 
    return Type.GetType(typeName); 
} 

我讀了幾篇文章,如this one是談論其設置組件的名字,但我仍然不不知道如何要做到這一點,並會在正確的方向欣賞提示。我知道visual studio可以找出程序集名稱,因爲它可以找出class1表示namespace.scenario1.class1

謝謝!

+0

爲什麼不直接使用的類型名稱?我的意思是,如果你使用'Type.GetType(「TheTypeName」)''你已經可以做到這一點而不會做任何事情...... – Gusman

+0

好吧,對不起,沒有讀過最後一部分,如果你想要一個類型的真實名稱與GetType一起使用通過typeof(theType).AssemblyQualifiedName檢索完整名稱,它將返回包含程序集和命名空間的完全限定名稱。 – Gusman

+0

@Gusman - 當我嘗試 '回報的typeof(typeName的).AssemblyQualifiedName;' 我得到的字符串是可變的,但使用像一個類型 –

回答

0
internal static Type GetType(string typeName) 
{ 
    return assembly.GetTypes().First(t => t.Name == typeName);  
    // Note: Exception occurs if it doesn't exist.  
} 
0

你需要做的是這樣的:

Type type = Type.GetType("Namespace.MyClass, MyAssembly"); 
+0

你能給應該屬於用戶的具體情況以及具體的例子? – EtherDragon

+0

謝謝Zdravko - 我想我的問題也是如何自動找出程序集名稱。你可以假設每個類都屬於它自己的命名空間。如果我必須爲每個案例陳述輸入一個彙編名稱,那麼我可以保留現在的情況。 –

+0

命名空間的相同評論(似乎無法編輯我的評論) –