一尘不染

Func vs. Action vs. Predicate

c#

借助真实示例及其用法,有人可以帮助我理解以下内容:

  1. 我们什么时候需要Func委托?
  2. 我们什么时候需要动作委托?
  3. 什么时候需要谓词委托?

阅读 231

收藏
2020-05-19

共1个答案

一尘不染

Func和之间的区别Action只是您是否希望委托返回一个值(使用Func)或不返回(使用Action)。

Func 在LINQ中可能是最常用的-例如在投影中:

 list.Select(x => x.SomeProperty)

或过滤:

 list.Where(x => x.SomeValue == someOtherValue)

或键选择:

 list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...)

Action通常用于诸如List<T>.ForEach:对列表中的每个项目执行给定的操作。我用这个少往往比Func,虽然我
有时使用无参数的版本,喜欢的东西Control.BeginInvokeDispatcher.BeginInvoke

Predicate实际上只是一个特殊情况Func<T, bool>,在所有代表Func和大多数Action代表出现之前就引入了。我怀疑,如果我们就已经有了Func,并Action在他们的各种名目,Predicate就不会被引入…虽然它
确实 给与了一定意义上的使用委托的,而FuncAction用于广泛不同的目的。

Predicate主要用于在List<T>对等的方法FindAllRemoveAll

2020-05-19