将String与类名进行比较

时间:2012-11-15 07:53:01

标签: vb.net

我有一点问题: 我有一个方法来解析传入的字符串中的某些值,如果找到一个值,则实例化一个新的类。类名与解析后的字符串相同。目前,我的代码如下所示:

Public Class Test1
End Class

Public Class Important
End Class

Public Class DoWork
Public Sub DoWork(incoming as String)
Select case incoming
case "Test1"
dim myobj as new Test1
Case "Important"
dim myobj as new Important
End Select
End Sub
End Class

我不喜欢像“Test1”这样的字符串文字 - 我可以将它们存储在一个常量中,但是如果类名改变了,它们也必须改变。有没有办法用类的名称替换文字? 我知道me.gettype会为实例化对象生成结果,但是类的简单名称呢,这个时候不是对象呢?

2 个答案:

答案 0 :(得分:2)

如果您的字符串格式正确,则可以使用Type.GetType(string)方法检索类型。然后,如果您在该类型上有默认构造函数,则可以使用Activator类来创建实例。

答案 1 :(得分:1)

如果您遇到当前情况,使用传入的字符串参数,Rafal的答案很好。但它仍然有点脆弱。如果传入参数发生变化怎么办?如果要重构代码,将某些类移动到不同的命名空间或程序集,该怎么办?如果这些字符串发生了变化怎么办?你现在必须重命名你的类并重新编译吗?你现在没有明确地看到魔术字符串,但它们仍然存在。

所以问问自己 - 这些字符串来自哪里?它们是由您的代码在内部生成的吗?如果是这样,您可能希望生成与要实例化的类对应的Enum值而不是字符串。如果它们是您映射到类的外部字符串,请考虑使用映射String-> Type的显式映射(例如,在配置文件中)。它有点麻烦,但更灵活。