Delegate Action<T in> Func<T in,out Tresult> Predicate<T>

action<T> 和  func<T> 都是delegate的简写形式,其中T为可以接受的参数类型

action<T> 指那些只有输入参数,没有返回值

Delegate 的代码

1 public delegate void myDelegate(string str);  //申明
2 public static void HellowChinese(string strChinese)
3 {
4     Console.WriteLine("Good morning," + strChinese);
5     Console.ReadLine();
6 }
7
8 myDelegate d = new myDelegate(HellowChinese);
9 d("Mr wang"); 
用了Action之后:
1 public static void HellowChinese(string strChinese)
2 {
3     Console.WriteLine("Good morning," + strChinese);
4     Console.ReadLine();
5 }
6
7 Action<string> action = HellowChinese;
8 action("Spring.");  
 1 public class MyBlogBase
 2     {
 3         public string myName;
 4         Action<string> myAction;
 5         public MyBlogBase()
 6         {
 7             //myAction = delegate(string curName) { myName = curName; };//采用匿名委托
 8             //myAction = new Action<string>(SetAction); //指定一个实际的方法
 9             myAction = curname => { myName = curname; }; //使用Lamda表达式
10
11         }
12         private void SetAction(string name)
13         {
14             myName = name;
15         }
16     }

在上例中,给出了3种使用Action的方法,方法一:采用匿名委托,方法二:指定一个实际的方法。方法三:使用Lamda表达式。

相当于省去了定义委托的步骤

func<T in,T Tresult> 这个和上面的那个是一样的,区别是这个有返回值Tresult

1 public static string HelloEnglish(string strEnglish)
2 {
3     return "Hello." + strEnglish;
4 }
5
6 Func<string, string> f = HelloEnglish;
7 Console.WriteLine(f("Srping ji"));
8 Console.ReadLine();  

Predicate<T>:也是一种委托,表示定义一组条件并确定指定对象是否符合这些条件的方法.此方法常在集合的查找中被用到,如:数组,正则拼配的结果集中被用到。使用此方法快捷方便,使用代码如下:

 1 Predicate<int> myPredicate;
 2         int[] myNum = new int[8] { 12, 33, 89, 21, 15, 29, 40, 52 };
 3        public int[] myResult;
 4         public MyBlogBase()
 5         {
 6             myPredicate = delegate(int curNum)
 7             { if (curNum % 2 == 0) return true;
 8               else return false;
 9             };
10         }
11         public void StartPredicate()
12         {
13             myResult = Array.FindAll(myNum, myPredicate);
14         }

上例中说明了Predicate的使用,FindAll方法中,参数2即是一个Predicate,在具体的执行中,每一个数组的元素都会执行指定的方法,如果满足要求返回true,并会被存放在结果集中,不符合的则被剔除,最终返回的集合,即是结果判断后想要的集合,此方法应用场景感觉像迭代中的yield。

时间: 2024-10-11 19:58:22

Delegate Action<T in> Func<T in,out Tresult> Predicate<T>的相关文章

关于Action&lt;T&gt; 、Func&lt;T&gt;、EventHandler&lt;T&gt;、event、delegate

c# 最初的时候 只有 delegate,之后的版本封装了Action<T> .Func<T>.EventHandler<T> 关于Action<T>  实际上Action<T>  等同于旧版的 public delegate void Action(); public delegate void Action<T1>(T1 arg1); public delegate void Action<T1, T2>(T1 arg

温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件

一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld() { Console.WriteLine("Hello World!"); } public void HelloWorld(string name) { Console.WriteLine("Hello ,{0}!", name); } 但是有些时候,我们希望把一

C#委托Action、Action&lt;T&gt;、Func&lt;T&gt;、Predicate&lt;T&gt;

CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范. 一.Action Action封装的方法没有参数也没有返回值,声明原型为: 1 public delegate void Action(); 用法如下: 1 public void Alert() 2 { 3 Console.Write

Action&lt;T&gt; 和 Func&lt;T&gt; 委托

概述: 除了为每个参数和返回类型定义一个新委托类型之外,可以使用Action<T> 和 Func<T> 委托. Action<T> Action<T>委托表示引用一个void返回类型的方法. Func<T> Func<T>委托允许调用带返回类型的方法. 使用: 和在 委托的使用 - 浅谈 中类似,我们可以使用允许带返回类型的方法的 Action<T> 委托: 1 using System; 2 3 namespace Si

Action、Action&lt;T&gt;、Func&lt;T&gt;、Predicate&lt;T&gt;

.net4.0新出了几个委托Action. Action<T>.Func<T>.Predicate<T>,其本质上都是delegate关键字来声明的,待会下面原型大家可以看到,以前我们一般使用delegate关键字来使用委托,但是如果我们的.net为4.0或者以上版本的时候,我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范,显得比较有档次,哈哈. 1.Action  场景:委托的方法没有参数也没有返回值

[转]C#委托Action、Action&lt;T&gt;、Func&lt;T&gt;、Predicate&lt;T&gt;

CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范. 一.Action Action封装的方法没有参数也没有返回值,声明原型为: 1 public delegate void Action(); 用法如下: 复制代码 1  public void Alert() 2  { 3     Co

c# delegate action func predicate event 匿名函数 lambda

1.delegate 是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. 与其它的类不同,delegate类能够拥有一个签名 (signature),并且它只能持有与它的签名相匹配的方法的引用. 它所实现的功能与C/C++中的函数指针十分相似.它允许你传递一个类A的方法m 给另一个类B的对象,使得类B的对象能够调用这个方法m.但与函数指针相比,delegate有许多函数指针不具备的优点: 首先,函数指针只能指向静态函 数,而delegate既可以引用静态函数,又可以引用非静态成员函

C# delegate Action&lt;T&gt; lambda表达式

转载以记录:http://blog.csdn.net/educast/article/details/7219854 在使用 Action<T> 委托时,不必显式定义一个封装只有一个参数的方法的委托.以下代码显式声明了一个名为 DisplayMessage 的委托,并将对 WriteLine 方法或 ShowWindowsMessage 方法的引用分配给其委托实例. 1 usingSystem; 2 usingSystem.Windows.Forms; 3 delegatevoid Displ

Action、Action&lt;T&gt;、Func&lt;T&gt; 匿名函数的写法

void ht_HLB_Set(Dictionary<int, int> dic) { //匿名函数 Action<int> fun = (int jhShare_Iid) => { try { switch (dic[jhShare_Iid]) { case 0: s.Color = GradientButtons.ColorEnum.red; break; case 1: s.Color = GradientButtons.ColorEnum.blue; break; c