Vb.net 使用基于类名的Lambda表达式创建对象
我指的是以下链接:Vb.net 使用基于类名的Lambda表达式创建对象,vb.net,reflection,lambda,expression,Vb.net,Reflection,Lambda,Expression,我指的是以下链接: http://rogeralsing.com/2008/02/28/linq-expressions-creating-objects/ 是否可以通过提供类名来增强它以创建对象? 基本上是通过使用Lambda表达式来实现Activator.CreateInstance下面可以做的事情 Dim typeName As String = "Testing.ClassNameth, Testing" Dim typ As Type = Type.GetType(typeName)
http://rogeralsing.com/2008/02/28/linq-expressions-creating-objects/
是否可以通过提供类名来增强它以创建对象?
基本上是通过使用Lambda表达式来实现Activator.CreateInstance下面可以做的事情
Dim typeName As String = "Testing.ClassNameth, Testing"
Dim typ As Type = Type.GetType(typeName)
Dim testObj = Activator.CreateInstance(typ)
Dim methodInfo As MethodInfo = testObj.GetType().GetMethod("TestPrintObject")
之所以这样做,是因为Activator.CreateInstance的性能非常慢
谢谢 好的。经过几次研究,以下是答案: 将以下函数添加到任何相关类:
Public Function GetActivator(Of T)(type As Type) As ObjectActivator(Of T)
'make a NewExpression that calls the
'ctor with the args we just created
Dim newExp As NewExpression = Expression.[New](type)
'create a lambda with the New
'Expression as body
Dim lambda As LambdaExpression = Expression.Lambda(GetType(ObjectActivator(Of T)), newExp)
'compile it
Dim compiled As ObjectActivator(Of T) = DirectCast(lambda.Compile(), ObjectActivator(Of T))
Return compiled
End Function
Public Delegate Function ObjectActivator(Of T)() As T
然后我们可以调用上面的函数,如下所示:
Dim typeName As String = "Testing.ClassNameth, Testing"
Dim typ As Type = Type.GetType(typeName)
Dim testObj As Object = YourHelperClassInstance.GetActivator(Of Object)(typ).Invoke()
希望这篇文章能对将来的人有所帮助
谢谢