gpt4 book ai didi

.net - 如何组合两个表达式 : result = exp1(exp2);

转载 作者:行者123 更新时间:2023-12-04 14:36:59 31 4
gpt4 key购买 nike

作为主题,对于这种情况,如何将两个表达式合并为一个:

Expression<Func<IEnumerable<T>, IEnumerable<T>>> exp1;
Expression<Func<IEnumerable<T>, IEnumerable<T>>> exp2;

Expression<Func<IEnumerable<T>, IEnumerable<T>>> result = ???; // exp1(exp2)

最佳答案

这实际上只是结合两个 Expression<Func<T, T>> 的特定形式值。这是一个这样做的例子:

using System;
using System.Linq.Expressions;

public class Test
{
public static Expression<Func<T, T>> Apply<T>
(Expression<Func<T, T>> first, Expression<Func<T, T>> second)
{
ParameterExpression input = Expression.Parameter(typeof(T), "input");
Expression invokedSecond = Expression.Invoke(second,
new Expression[]{input});
Expression invokedFirst = Expression.Invoke(first,
new[]{invokedSecond});
return Expression.Lambda<Func<T, T>>(invokedFirst, new[]{input});
}

static void Main()
{
var addAndSquare = Apply<int>(x => x + 1,
x => x * x);

Console.WriteLine(addAndSquare.Compile()(5));
}
}

你可以写 ApplySequence在这些方面很容易,如果你想:
    public static Expression<Func<IEnumerable<T>, IEnumerable<T>>>
ApplySequence<T>
(Expression<Func<IEnumerable<T>, IEnumerable<T>>> first,
Expression<Func<IEnumerable<T>, IEnumerable<T>>> second)
{
return Apply(first, second);
}

关于.net - 如何组合两个表达式 : result = exp1(exp2);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1270783/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com