【问题标题】:Create Object by using Lambda Expression based on Class Name使用基于类名的 Lambda 表达式创建对象
【发布时间】:2014-01-17 04:02:11
【问题描述】:

我参考下面的链接:

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的性能很慢。

谢谢!

【问题讨论】:

    标签: vb.net reflection lambda expression


    【解决方案1】:

    好的。经过一番研究,以下是答案: 将以下函数添加到您的任何相关类中:

    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()
    

    希望这篇文章将来对某人有所帮助。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2011-10-10
      相关资源
      最近更新 更多