代表:Predicate Action Func

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

  • 谓词
  • 行动
  • FUNC

C#开发人员应该注意哪些其他代表?

你在生产代码中多久使用一次?

  • Predicate :基本上Func<T, bool> ; 问“这个具体的论点是否满足代表所代表的条件? 用于像List.FindAll这样的东西。

  • Action :给出的参数执行一个行动。 非常普遍的目的。 在LINQ中用处不大,因为它基本上暗示了副作用。

  • Func :在LINQ中广泛使用,通常用于转换参数,例如通过将复杂结构投影到一个属性。

其他重要代表:

  • EventHandler / EventHandler<T> :在WinForms中使用

  • Comparison<T> :像IComparer<T>但委托forms。

ActionFuncPredicate都属于代表家庭。

Action :行动可以采取ninput参数,但它返回无效。

Func :Func可以接受n个input参数,但总会返回提供的types的结果。 Func<T1,T2,T3,TResult> ,这里T1,T2,T3是input参数,TResult是输出参数。

Predicate :Predicate也是Func的一种forms,但总会返回bool。 简而言之,它是Func<T,bool>包装。

除了乔恩的回答之外,还有

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

MethodInvoker是WinForms开发人员可以使用的一种; 它不接受任何参数并返回没有结果。 它早于Action,并且在调用到UI线程时仍然经常使用,因为BeginInvoke()等人接受一个无types的Delegate; 尽pipe行动也会如此。

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

我也会知道ThreadStart和ParameterizedThreadStart; 再次,大多数人将取代行动这些天。

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

操作委托 – 操作委托实例可能指向带参数的方法并返回void。

Func委托 – Func委托实例可以指向可变数目的参数并返回某种types的方法。

谓词谓词类似于func委托实例,它们可以指向具有可变数量参数的方法并返回一个booltypes。

其他人已经提到了具体代表的正确用法,但是我想补充一些能够完成答案的东西。 名称Func,Action,Predicate有math背景。 为了简单起见,我将给出一个这样的math函数的非正式定义:

函数是集合之间的关系。 我们把一个成员作为一个input,并将该input映射到另一个成员的一个成员。 换句话说,一些东西被input并产生输出。

再次,非正式地,math谓词是一个陈述,可能是真或假取决于它的variables。 正如其他人已经提到了一个返回布尔值的函数。

最后,Action是一个无效的函数(或者是math上更正确的名字 – 空方法或者过程)

动作和函数与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();