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()
希望这篇文章能对将来的人有所帮助

谢谢