请参阅以下代码:
Public Function Test()
Dim o As Object = getVariable("Integer")
If TypeOf o Is Integer Then
'Do some processing on the integer
ElseIf TypeOf o Is Decimal Then
'Do some processing on the integer
End If
End Function
Public Function getVariable(ByVal strDataType As String)
If strDataType = "Integer" Then
Return New Integer
ElseIf strDataType = "Decimal" Then
Return New Decimal
ElseIf strDataType = "Double" Then
Return New Double
End If
End Function
我怀疑使用Reflection有一种更简单的方法(更少的代码行)?
答案 0 :(得分:3)
您可以将Type.GetType与Activator.CreateInstance一起使用:
Public Function getVariable(ByVal strDataType As String)
Return Activator.CreateInstance(Type.GetType(strDataType))
End Function
对于strDataType
,您需要分别使用System.Int32
,System.Decimal
和System.Double
。如果您想将其保留为Integer
等,则需要合并字符串翻译,例如,使用Dictionary(Of String, String)
,其中包含("Integer", "System.Int32")
等条目。
答案 1 :(得分:0)
真正的问题是你试图解决的问题是什么? Activator会起作用。正在尝试创建工厂或IOC容器。你能提供更多细节吗?你也可以创建一个字典,键是字符串类型,然后item存储用于实际创建类型的委托。