我有两种表达方式:
public static Expression<Func<int, bool>> IsDivisibleByFive() {
return (x) => x % 5 == 0;
}
and
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);
}
Then do:
public static class IntegerExtensions
{
public static bool IsValid(this int self)
{
return IsValidExpression().Compile()(self);
}
}
在我的代码中:
if (32.IsValid()) {
//do something
}
我有很多这样的表达式,我想定义一次,而不是到处重复代码。
Thanks.
如果您只是尝试将表达式体与AndAlso
表达式是x
参数表达式实际上是两个不同的参数(即使它们具有相同的名称)。为此,您需要使用表达式树访问者来替换x
在两个表达式中,您想要将其与一个通用的组合ParameterExpression
.
您可能想看看Joe Albahari 的 PredicateBuilder 库,这会为您完成繁重的工作。结果应该类似于:
public static Expression<Func<int, bool>> IsValidExpression() {
return IsDivisibleByFive().And(StartsWithOne());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)