代表:谓词vs.动作vs.函数

问题描述 投票:131回答:8

有人可以对这3个最重要的代表提供很好的解释(希望有例子):>

  • 谓词
  • 动作
  • 功能

有人可以对这3个最重要的代表提供很好的解释(希望有一些例子:谓词操作函数)>

c# delegates predicate func
8个回答
177
投票
  • Predicate:本质上是Func<T, bool>;提出问题“指定的参数是否满足委托代表的条件?”用于List.FindAll之类的东西。


43
投票
[ActionFuncPredicate都属于委托家族。

Action:动作可以接受n个输入参数,但返回空值。


9
投票
除了乔恩的答案,还有

    Converter<TInput, TOutput>:本质上是Func<TInput, TOutput>,但具有语义。由List.ConvertAll和Array.ConvertAll使用,但个人在其他任何地方都没有看到它。

4
投票
MethodInvoker是WinForms开发人员可以使用的一种;它不接受任何参数,也不返回任何结果。它早于Action,并且在调用UI线程时仍经常使用,因为BeginInvoke()等接受无类型的Delegate;尽管动作也一样。

myForm.BeginInvoke((MethodInvoker)delegate { MessageBox.Show("Hello, world..."); });


3
投票
Predicate,Func和Action是.NET的内置委托实例。这些委托实例中的每一个都可以引用或指向具有特定签名的用户方法。

动作委托-动作委托实例可以指向带有参数并返回void的方法。


2
投票
带有lambda的动作和功能:

person p = new person(); Action<int, int> mydel = p.add; /*(int a, int b) => { Console.WriteLine(a + b); };*/ Func<string, string> mydel1 = p.conc; /*(string s) => { return "hello" + s; };*/ mydel(2, 3); string s1= mydel1(" Akhil"); Console.WriteLine(s1); Console.ReadLine();


1
投票
Func对LINQ更友好,可以作为参数传递。 (无积分)

谓词不能,必须重新包装。


1
投票
有关参数和每种类型的参数的简单示例

此Func接受两个int参数并返回int。Func始终具有返回类型

© www.soinside.com 2019 - 2024. All rights reserved.