VB 编译器自动将 lambda 转换为它们的LambdaExpression等价物(例如 in Dim a As LambdaExpression = Function(x) x.Length)。直到最近,我还认为该功能仅适用于 lambda,但后来我发现尝试将方法调用的结果作为参数传递给方法时出现相同的行为。编译器将我的调用转换为 aMethodCallExpression而不是调用!
Dim myQuery = From x In DataSource.Items
Group By x.Key Into g = Group
Select New With {
.Key = Key,
.RedItems = g.Sum(ItemsOfColor(Colors.Red))
}
Private Function ItemsOfColor(color As Integer) As Expression(Of Func(Of Item, Integer))
Return Function(item) If(item.Color = color, 1, 0)
End Function
RedItems包含一个作为参数MethodCallExpression调用ItemsOfColor的,而不是我预期的调用结果。Colors.RedLambdaExpressionItemsOfColor
问题:为什么编译器认为这是我想要的行为,有没有办法关闭它?