Trying to get into Expressions, IL-Generated Delegates etc.
I have this prototype for combining 'Comparisons', but I think it's quite slow, even with just 2-3 Funcs:
(I use VB -- sorry ;) )
Public Function BuildCompareExpression(Of T)(exp1 As Expression(Of Func(Of T, T, Integer)), exp2 As Expression(Of Func(Of T, T, Integer))) As Expression(Of Func(Of T, T, Integer))
Dim parameters() = {Expression.Parameter(GetType(T)), Expression.Parameter(GetType(T))}
Dim invoked = Expression.Invoke(exp1, parameters)
Dim invoked2 = Expression.Invoke(exp2, parameters)
Dim isTrue = Expression.Equal(Expression.Constant(0), invoked)
Dim conditional = Expression.Condition(isTrue, invoked2, invoked)
Dim lambda = Expression.Lambda(Of Func(Of T, T, Integer))(conditional, parameters)
While lambda.CanReduce
lambda = CType(lambda.Reduce,Expression(Of Global.System.Func(Of T, T, Integer)))
End While
Return lambda
End Function
OBS! Of course, upon adding the last
Func(Of T, T, Integer)
, I do 'lambda.Compile'
Hope anyone has some better/faster alternative.
Thanks in advance.
Jens, Denmark.