gpt4 book ai didi

C#如何将两个表达式组合成一个新的?

转载 作者:行者123 更新时间:2023-12-01 14:09:18 27 4
gpt4 key购买 nike

我有两种表达方式:

public static Expression<Func<int, bool>> IsDivisibleByFive() {
return (x) => x % 5 == 0;
}

public static Expression<Func<int, bool>> StartsWithOne() {
return (x) => x.ToString().StartsWith("1");
}

我想创建一个同时应用这两个表达式的新表达式(相同的表达式在我的代码中以不同的组合使用):

public static Expression<Func<int, bool>> IsValidExpression() {
return (x) => IsDivisibleByFive(x) && StartsWithOne(x);
}

然后做:

public static class IntegerExtensions
{
public static bool IsValid(this int self)
{
return IsValidExpression().Compile()(self);
}
}

在我的代码中:

if (32.IsValid()) {
//do something
}

我有很多这样的表达式,我想定义一次而不是到处重复代码。

谢谢。

最佳答案

如果您只是尝试将表达式主体与 AndAlso 结合使用,就会遇到这个问题表达式是 x参数表达式实际上是两个不同的参数(即使它们具有相同的名称)。为此,您需要使用表达式树访问者来替换 x在两个表达式中,你想用一个单一的、常见的 ParameterExpression 组合起来.

你可能想看看Joe Albahari's PredicateBuilder library ,这会为您完成繁重的工作。结果应该类似于:

public static Expression<Func<int, bool>> IsValidExpression() {
return IsDivisibleByFive().And(StartsWithOne());
}

关于C#如何将两个表达式组合成一个新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840981/

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