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

2023-12-05

我有两种表达方式:

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(使用前将#替换为@)

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

随机推荐

  • 如何重写子类中的方法?

    我编写了一个库存程序 其中包含一个数组和一个方法来计算输入的所有库存项目的总成本 我现在必须包含一个子类来覆盖原来的子类以包含 一个独特的功能 我创建了一个名为 ItemDetails 的新文件来设置原始 Item 的子类 我需要在这个子类
  • OAuth Twitter 和黑莓

    我在黑莓上有一个 j2me 项目 需要连接到 twitter 我已经完成了大部分困难的工作 我有一个 api 可以轻松引导我访问访问令牌 现在我似乎无法让身份验证与 REST 中的状态更新一起使用 我知道我的令牌是有效的 因为如果我运行验证
  • 如何更改表格视图单元格的高度

    我正在尝试读取一些 RSS 数据 我有不同大小的数据 数据存在于 Tabke 视图数据对象中 我使用标签添加数据并调整数据大小 没有成功 请帮忙 UITableViewCell tableView UITableView tableView
  • 可以制作灰度BMP文件吗?

    我正在尝试制作一个将 8 位灰度图像输出到 bmp 文件的程序 我发现8位BMP文件是有索引的 是否可以省略颜色表 只在颜色表中放入值而不是索引 或者BMP格式不允许这样 您仍然需要 LUT 但创建它非常简单 它只有 256 个条目 其中红
  • 这个递归正则表达式究竟是如何工作的?

    这是后续这个问题 看看这个模式 o 1 o It matches any sequence of o with a length of 2n with n 1 It works see regex101 com word boundarie
  • Python在内存中解压gzip数据,无需文件

    我已经从 HTTP 回复中压缩了数据 我有以下代码 def gzipDecode self content import StringIO import gzip outFilePath test compressedFile String
  • 如何隐藏或折叠 VSC 中的所有 javascript console.log 行

    大量的日志记录对我来说非常有帮助 然而 有时我想通过隐藏 折叠或降低字体的不透明度来暂时减少在 VSC 中编辑的代码的混乱程度 console log console warn and console errorjavascript Vue
  • PHP 重定向强制刷新 (CTRL+F5)

    我有一个带有可编辑表格的页面 我需要用户能够编辑它 然后提交他们的更改 一切正常 直到我将它们重定向到包含新内容 与其更改相关 的同一页面 然而 他们看到的是旧内容 如果我在浏览器上按 ctrl f5 它们的内容就会更新 我想知道是否有办法
  • C# 语法:----- IEnumerable people = new List();

    我理解前两句话 然而 对于第三个说法 我无法弄清楚这是什么类型的人 IEnumerable 人 还是列表 人 我认为幕后有一个转换 有人能解释一下陈述3中使用了什么技术吗 IEnumerable Person people new IEnu
  • 谷歌玩游戏成就重置(每天)

    上周我们软启动了我们的游戏 我们开始收到人们的错误 他们 所有人 似乎都存在的错误之一是 他们的成就至少每天都会被重置 但有时甚至在重新启动游戏时也会重置 成就在解锁时确实会弹出窗口 甚至在成就 UI 中可见 但它们不断被重置 删除 我们确
  • 从 Plone 内容类型生成 PDF

    我需要从内容类型创建 PDF 如果重要的话 可以灵活地制作 以便用户创建一个新文档 并在填写表单后生成 PDF 并准备下载 因此 基本上在创建 修改文档后 应该创建一个 PDF 并将其存储在 ZODB 中 实际上我使用的是 blob 以便我
  • 忽略 内的元素以不在点击时导航

    我正在尝试开始删除 btn 它位于 div 内 该 div 包含在react router dom 标记中 我希望能够在单击该 div 时导航到已建立的路径 但如果目标是删除 btn 那么它不应该导航 而只是在删除 btn 内执行 onCl
  • 如何在 Vim(或其他地方)中使用正则表达式搜索十六进制转储?

    我正在寻找一种方法来搜索二进制文件的十六进制转储中一系列十六进制数字的文本表示形式 如下所示 0x000001A0 36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03 0x000001B0 28
  • 绘制多重比较图?

    当一个人希望比较 测试 多个组时 例如 在进行方差分析时 就会面临多重比较的问题 如果我们想绘制比较图 同样适用 我的问题是 您知道哪些工具 在 R 中 可以进行反映多重比较的绘图 目前 我只知道两个 尽管我确信还有更多 TukeyHSD
  • 在 C 中将 char 指针类型转换为 float [重复]

    这个问题在这里已经有答案了 我有一个包含 ff 数据的平面文件 date quantity price item 我想使用以下结构创建数据记录 typedef struct char date item int quantity float
  • 使用 Python 的旧推文 Tweepy

    我正在尝试使用 Python 中的 tweepy 获取较旧的推文数据 大约 2 个月前 我尝试了自始至终的参数 但没有成功 有没有人在 tweepy 或其他 API 中找到解决办法 for id tweet in enumerate twe
  • 如何将布尔值插入数据库

    我必须将用户数据添加到名为 employees 的数据库表中 它有 ID 姓名 姓氏 用户名 密码 电子邮件 地址 管理员权限选项 Administator rigts 是布尔选项 是或否 当我制作一个包含所有数据的表单时 我想通过复选框检
  • 为什么Python无法从PIL导入图像?

    我尝试运行的单行如下 from PIL import Image 无论这看起来多么简单 它都会给出一个错误 Traceback most recent call last File C 2014 10 22 12 49 py line 1
  • 在 SQL Server 中创建审核触发器

    我需要对 SQL Server 2005 数据库中的两个表实施更改跟踪 我需要审核添加 删除 更新 详细说明更新内容 我本来打算使用trigger这样做 但似乎很容易错误地做到这一点 任何人都可以发布一个更新触发器的示例 以优雅的方式成功地
  • C# 如何将两个表达式组合成一个新表达式?

    我有两种表达方式 public static Expression