【问题标题】:Generate Lambda Expression生成 Lambda 表达式
【发布时间】:2013-12-12 02:11:44
【问题描述】:

我大概有以下代码:

Public Class Fruit
    Public Property Name As String

    Public Function GetName() As String
        Return Name
    End Function
End Class
Dim list As New List(Of Fruit)

For index = 1 To 10
    Dim fruitObj As New Fruit
    fruitObj.Name = "Testing" + index.ToString()
    list.Add(fruitObj)
Next

Dim iEnumerableString As IEnumerable(Of String) = list.Select(Function(m) m.Name)

在上面的代码示例中,如果我想生成Function(m) m.Name,我应该怎么做?

所以,我可以这样称呼它:

Dim iEnumerableString As IEnumerable(Of String) =
list.Select(GenerateLambda("name"))

谢谢

【问题讨论】:

    标签: vb.net lambda expression


    【解决方案1】:

    您可以使用参数调用创建表达式树。

    GeneratePropertyExpression方法:

    Private Shared Function GeneratePropertyExpression(Of TSource, TResult)(propertyName As String) As Func(Of TSource, TResult)
        Dim parameter = Expression.Parameter(GetType(TSource), "x")
        Dim propertyExpression = Expression.[Property](parameter, propertyName)
        Return Expression.Lambda(Of Func(Of TSource, TResult))(propertyExpression, parameter).Compile()
    End Function
    

    用法:

    Dim iEnumerableString As IEnumerable(Of String) = list.Select(GeneratePropertyExpression(Of Fruit, String)("Name"))
    

    我还没有测试过,所以如果它不起作用,请告诉我。

    【讨论】:

    • 酷。您现在应该花一些时间尝试了解那里发生了什么(如果您还没有这样做的话)。这是学习新语言功能的最佳方式。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多