为什么使用 Func 而不是 Predicate

2023-11-21

这只是一个好奇的问题,我想知道是否有人有一个好的答案:

在 .NET Framework 类库中,我们有以下两个方法:

public static IQueryable<TSource> Where<TSource>(
    this IQueryable<TSource> source,
    Expression<Func<TSource, bool>> predicate
)

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
)

他们为什么使用Func<TSource, bool>代替Predicate<TSource>?似乎是Predicate<TSource>仅由以下人员使用List<T> and Array<T>, while Func<TSource, bool>几乎所有人都使用Queryable and Enumerable方法和扩展方法...这是怎么回事?


While Predicate已同时推出List<T> and Array<T>,在.net 2.0中,不同的Func and Action变体来自.net 3.5。

所以那些Func谓词主要用于 LINQ 运算符中的一致性。从 .net 3.5 开始,关于使用Func<T> and Action<T> the 指导方针国家:

请使用新的 LINQ 类型Func<> and Expression<>而不是定制 委托和谓词

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

为什么使用 Func 而不是 Predicate? 的相关文章

随机推荐

  • python查找字符串中重复的子字符串[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在Python中寻找一个函数 您可以在其中给出一个字符串作为输入 其中某个单词已重复多次 直到达到一定的长度 那么输出就是那个词 重复的单词不一定全部重复 也有可能根本没有重
  • 从 JAXB 泛型中删除 xsi:type、xmlns:xs 和 xmlns:xsi

    使用 JAXB 时 我想在使用泛型时从 XML 元素中删除多余的命名空间 类型 我该怎么做或者我做错了什么 我想使用泛型 这样我只需编写一次代码块 示例代码 public static void main String args try T
  • 使用 UserDefaults 保存和检索 bool

    我正在尝试保存一个bool从 UISwitch 到 UserDefaults 的值 并在另一个视图中检索它 但是 我尝试遵循多个教程和堆栈答案 但似乎都不起作用 这就是我保存它的方式 class SettingsViewController
  • 如何强制清除 STL 内存缓存?

    我有一个类 它有一个类型字段unordered map 我在我的应用程序中创建了该对象的单个实例 该实例被包装在shared ptr 该对象非常消耗内存 我想在使用完它后立即将其删除 然而 重置指针仅仅释放了对象占用的一小部分内存 如何强制
  • 手动将设备插件(和其他)安装到 cordova 3.0 中

    Phonegap Cordova 3 0 从 3 0 版本开始已转向模块化设计 例如 要调用device versionAPI 您需要将设备插件包含到您的项目中 任何人都可以向我提供有关如何将设备 或任何其他 cordova API 插件安
  • Java .Class 文件更改字符串

    我正在尝试修改一个minecraft mod gravisuite 每当我按F键时 它就会将 重力引擎关闭 打开 但是我想更改此字符串 我首先将 重力引擎关闭 替换为 重力引擎关闭 通过使用十六进制编辑器 但此后该文件不再有效 我尝试使用
  • SQL:两个没有年份的日期之间在哪里?

    我正在尝试查询历史数据 我需要返回 1 个月内的数据 2 周前和 2 周前 但我需要年份无关紧要 所以 如果我今天要进行查询 我希望所有行都带有datexxxx 06 31 和 xxxx 07 27 之间 先谢谢您的帮助 编辑 我尝试过两种
  • openSSL rsautl 和 dgst 之间的区别

    以下命令为输入文件生成签名 openssl dgst sha1 sign privateKey pem out signature1 someInputFile 以下命令还为输入文件生成签名 openssl dgst binary sha1
  • 使用 JavaScript Array.sort() 方法进行洗牌是否正确?

    我正在帮助某人解决他的 JavaScript 代码 我的目光被如下所示的部分吸引了 function randOrd return Math round Math random 0 5 coords sort randOrd alert c
  • 如何使用javascript从IE中的iframe中删除边框

    我正在尝试通过 javascript 将 iframe 插入浏览器 DOM 中 并希望删除 IE 的边框 但似乎无法删除 我已经尝试过这些但无济于事 iframeElement style borderStyle none and ifra
  • 用于索赔模式 xRM 的 Apache CXF 客户端(Microsoft Dynamics CRM 2011)?

    我正在尝试为 Microsoft Dynamics CRM 2011 xRM Web 服务 我理解为基于 WCF 4 创建 Apache CXF 2 7 5 客户端 其中 CRM 处于声明模式 以便 WSDL此 Web 服务指向 STS 在
  • “endl”和“\n”之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C std endl 与 n 我想知道是否有重要的这两种打印换行符的方法之间的区别 cout lt lt endl approach1 cout lt lt n approach2 有什么实际区别吗
  • 正则表达式否定整个单词? [复制]

    这个问题在这里已经有答案了 String test1 This is my test string 我想匹配一个不包含 test 的字符串 我可以用 Pattern p Pattern compile test 它有效 但在大多数网站上 例
  • Windows 上的 Python 和 XAMPP:如何做?

    我已经在我的 Win7x64 Xampp 和 Python 2 7 上安装了 现在我正在尝试获得Python语言的 力量 我该怎么做 我尝试过 mod python 和 mod wsgi 但第一个对于我的 Python 版本不存在 当我在安
  • 错误 CS2012:无法打开 <可执行路径> 访问 <可执行路径被拒绝>

    我当时正在 Visual Studio 2015 中开发 WPF 应用程序 一切都很顺利 直到意外地生成了 CS2012 错误 通知我它无法访问 更新 Debug 目录中的可执行文件 我尝试了以下方法但没有成功 Restart 关闭VS并再
  • 创建表单并在后台线程上使用 Form.ShowDialog

    使用Winforms 如果我所在的线程不是 主 ui 线程 我可以安全地进行操作吗 创建一个表格 在该表单上调用 ShowDialog 看来我会遵守以下规则 Winforms 控件必须在创建它们的线程上进行修改 从我完成的一些阅读来看 Sh
  • OpenCV TypeError:轮廓不是 numpy 数组,也不是标量

    我正在尝试使用 OpenCV 从 Nike 图像中提取标签 这是一个教程代码 取自 http opencv code com tutorials ocr ing nikes new rsvp program 我已经修改了几行代码 并且该部分
  • 指南针精灵图像和比例

    在过去的 4 个小时里 我一直在尝试找到一种使用 Compass 和 sass 创建精灵图像的方法 该图像还可以自动缩放每个单独的图像以与背景大小属性一起使用 我发现没有任何效果 不敢相信有这么难 有人有一个可行的例子吗 编辑 这是我到目前
  • 在线游戏,或者比ajax更快的东西来发送/接收数据

    我会尽可能地缩短它 到目前为止我所做的 我的游戏将使用 JavaScript 运行setTimeout or setInterval 这不是闪光灯或任何特殊的东西 到目前为止 我所做的就像一个测试运行 这样你可以更好地理解 几乎是循环 Aj
  • 为什么使用 Func 而不是 Predicate

    这只是一个好奇的问题 我想知道是否有人有一个好的答案 在 NET Framework 类库中 我们有以下两个方法 public static IQueryable