2017-04-17 151 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

命名空间的相同评论(似乎无法编辑我的评论) –