组合多个谓词

2024-01-16

c# .NET 2.0 有什么办法吗?组合多个谓词?

假设我有以下代码。

List<string> names = new List<string>();
names.Add("Jacob");
names.Add("Emma");
names.Add("Michael");
names.Add("Isabella");
names.Add("Ethan");
names.Add("Emily");

List<string> filteredNames = names.FindAll(StartsWithE);

static bool StartsWithE(string s)
{
    if (s.StartsWith("E"))
    {
        return true;
    }
    else
    {
        return false;
    }
}

这给了我:

Emma
Ethan
Emily

所以这是非常酷的东西,但我知道希望能够使用多个谓词进行过滤。

所以我希望能够这样说:

List<string> filteredNames = names.FindAll(StartsWithE OR StartsWithI);

为了得到:

Emma
Isabella
Ethan
Emily

我怎样才能实现这个目标? 目前,我只是将完整列表过滤两次,然后合并结果。但不幸的是,这是非常低效的,更重要的是我丢失了原始的排序顺序,这在我的情况下是不可接受的。

我还需要能够迭代任意数量的过滤器/谓词,因为可能有很多。

同样,它需要是 .NET 2.0 解决方案,不幸的是我无法使用该框架的较新版本

多谢。


怎么样:

public static Predicate<T> Or<T>(params Predicate<T>[] predicates)
{
    return delegate (T item)
    {
        foreach (Predicate<T> predicate in predicates)
        {
            if (predicate(item))
            {
                return true;
            }
        }
        return false;
    };
}

为了完整性:

public static Predicate<T> And<T>(params Predicate<T>[] predicates)
{
    return delegate (T item)
    {
        foreach (Predicate<T> predicate in predicates)
        {
            if (!predicate(item))
            {
                return false;
            }
        }
        return true;
    };
}

然后用以下方式调用它:

List<string> filteredNames = names.FindAll(Helpers.Or(StartsWithE, StartsWithI));

另一种选择是使用多播委托,然后使用GetInvocationList(),然后做同样的事情。然后你可以这样做:

List<string> filteredNames = names.FindAll(Helpers.Or(StartsWithE+StartsWithI));

不过,我不太喜欢后一种方法——感觉有点滥用多播。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组合多个谓词 的相关文章

  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 我想获取Java中的当前时间,但没有互联网,也没有系统时间

    我想获得准确的当前时间 我不想要系统时间 因为任何人都可以更改系统时间 并且我想在不访问互联网的情况下执行此操作 有什么办法吗 时间服务器 设置一个时间服务器 https en m wikipedia org wiki Time serve
  • ASP.NET Core 2.2 创建身份用户

    ASP Net Core 全新 必须使用 Identity 创建一个 asp net core 2 2 项目 并让用户播种 我找不到任何有关如何准确执行此操作的文档 我能够找到创建身份角色的代码 无论如何编译 还没有达到可以运行它的位置 p
  • 在控制台中移动光标和打印字符不适用于睡眠[重复]

    这个问题在这里已经有答案了 我想在同一个地方逐个打印一系列字符 我打印一个字母 然后睡眠等待 1 秒 使用控制台代码将光标向左移动一列 打印下一个字母 依此类推 问题是结果程序等待所有睡眠的总和 在我的示例中为 2 秒 然后仅打印最后一个字
  • Git 存储库未导出:致命:远程端意外挂起

    设置新的 git 安装 在一台 Windows 笔记本电脑上 我正在运行 在 cygwin 下 git daemon base path cygdrive c work proj 我的项目的根目录是 c work proj proj1 有一
  • 如何查找solr服务器是否正在运行

    我正在运行一个从 solr 服务器获取搜索结果的应用程序 但是当服务器未运行时 我没有收到服务器的响应 有什么方法可以发现我的服务器没有运行 以便我可以给出正确的错误消息 您可以定期 ping 您的服务器 例如http localhost
  • iOS9:崩溃报告中的重复行导致symbolicatecrash卡住

    This is 不是一个问题因为我已经找到了解决方法 我将其发布 以便其他人可以利用我在其上花费的时间 并使用我建议的解决方法 我收到了一些奇怪的崩溃报告 一行被重复了很多次 0x190e08000 0x190e49fff Notes ar
  • 三柱图

    某个过程的结果是从 A 到 C 通过 B 的路径列表 例如 which effect A1 A2 10 1 1 1 1 10 2 1 2 1 10 28 1 3 1 10 6 9 4 1 10 24 9 5 1 10 28 9 我想要的是一
  • 可捕获的致命错误:传递给 Illuminate\Routing\UrlGenerator::__construct() 的参数 2 必须是 Illuminate\Http\Request 的实例,给定 null

    当我尝试运行时出现此错误php artisan anything PHP Catchable fatal error Argument 2 passed to Illuminate Routing UrlGenerator construc
  • 苹果:联盟链接可以通过应用内购买赚钱吗?

    苹果最近 在过去一两个月内 对其联属计划进行了一系列更改 您能回答这个问题 联盟链接可以通过应用内购买赚钱吗 示例 联盟链接到一个免费应用程序 然后导致该应用程序中的应用程序内购买 是否会为链接所有者赚取佣金 先感谢您 简短的回答是 是 应
  • Android - 1 除以 2 = 0

    我一直在尝试使用我的新 IOIO for android 并且需要找到信号的频率 所以我将信号转换为二进制 然后用 1 除以 1 之间的时间 尽管当我这样做时 我发现我的输出为 0 然后我决定看看 1 2 给了我什么 令我惊讶的是它也给了
  • gluon Mobile LocalNotificationsServices.class 不工作

    大家好 我是新来的使用javafx进行Android开发 我正在尝试使用 android 创建推送通知javafx javafxports 和 gluon Mobile 我的问题是推送通知没有按照我的预期显示 我的这个想法来自 http g
  • 通过 bash 脚本询问 MongoDB 是否是 Master

    我的 mongodb 应该每天运行一次备份 它由一个主设备和两个从设备运行 我需要备份其中一个 因为它们只是副本 最简单的方法是仅在一个实例上运行备份脚本 但如果这个实例宕机了怎么办 因此 我认为在主服务器上运行备份脚本会很好 因为即使其他
  • JavaScript 事件委托 - 行为

    我正在尝试创建网页 为了提高性能 我决定使用事件委托 而不是直接绑定 但我遇到了事件委托的奇怪行为 或者我错过了一些东西 这是我的 HTML 结构 div section class myClass h1 Heading 1 h1 p So
  • Matplotlib 根据值使用不同颜色的条形图

    我正在绘制各个行业及其所有股票的回报 我希望值 gt 100 为绿色 sector lst XLK XLF XLE etc for i in sector lst fig plt figure figsize 12 8 for x in s
  • 在Python中确定特定数字的精度和小数位数

    我在 Python 中有一个包含浮点数的变量 例如num 24654 123 并且我想确定数字的精度和小数位数 在 Oracle 意义上 因此 123 45678 应该给我 8 5 12 76 应该给我 4 2 等等 我首先考虑使用字符串表
  • 如何制作像 Timely 这样漂亮又时尚的应用程序

    谷歌在设计方面的引用 以及一些应用程序示例 基于什么Google说在http developer android com http developer android com 在设计部分 开发人员应考虑三个目标 让我着迷 简化我的生活 让我
  • python networkx:如何获取随机路径?

    在networkx中有这样一个函数 nx all simple paths G source 0 target 5 它返回所有路径 但如果有很多可能的路径 它会工作很长时间 如何立即获得任意路径 它不产生all路径 它返回一个生成器 该生成
  • GCC 中的 C 函数对齐

    我正在尝试使用 aligned 16 属性将函数字节对齐到 16 字节边界 我做了以下事情 void attribute aligned 16 function 来源 http gcc gnu org onlinedocs gcc Func
  • 在箱线图中组合两个数据帧的信息

    我有两个通过转换 numpy 数组获得的数据帧 df1 和 df2 每个数据帧都有以下数据 data1 data2 datan indicator 0 2 482738 0 484757 1 344557 a 1 4 566902 1 33
  • 组合多个谓词

    c NET 2 0 有什么办法吗 组合多个谓词 假设我有以下代码 List