C#委托(Action、Func、predicate)

Predicate 泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。

public delegate bool Predicate<T>(T obj);
类型参数介绍:
T: 要比较的对象的类型。
obj: 要按照由此委托表示的方法中定义的条件进行比较的对象。
返回值:如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。

List<String> listString = new List<String>()
{
    "One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
};

listString.Find(x => x=="One");

Action

在使用 Action< T > 委托时,不必显式定义一个封装只有一个参数的方法的委托。

Action是无返回值的泛型委托。

Action 表示无参,无返回值的委托
Action<int,string> 表示有传入参数int,string无返回值的委托
Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托
Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托
Action至少0个参数,至多16个参数,无返回值。

         static void Main(string[] args)
        {
            Test<string>(Action,"Hello World!");
            Test<int>(Action, 1000);
            Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表达式定义委托
            Console.ReadKey();
        }
        public static void Test<T>(Action<T> action, T p)
        {
            action(p);
        }
        private static void Action(string s)
        {
            Console.WriteLine(s);
        }
        private static void Action(int s)
        {
            Console.WriteLine(s);
        }

Func

Func是有返回值的泛型委托

   Func<int> 表示无参,返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

   Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

   Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

        static void Main(string[] args)
        {
            Console.WriteLine(Test<int,int>(Fun,100,200));
            Console.ReadKey();
        }
        public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b)
        {
            return func(a, b);
        }
        private static int Fun(int a, int b)
        {
            return a + b;
        }
时间: 2024-10-13 08:54:37

C#委托(Action、Func、predicate)的相关文章

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

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

C# 委托 Action Func

Action<T> : 传递参数,只进不出,所以方法为void Func<in T, out Tv> : 传递参数,有进有出,所以传递的方法要return using System; using System.Collections.Generic; using System.Linq; namespace rooxml { public class main { public delegate void fucA(string s); public static void Mai

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

[转]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

委托delegate 泛型委托action&lt;&gt; 返回值泛型委托Func&lt;&gt; 匿名方法 lambda表达式 的理解

1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyBookDel myBookDel; //普通方法 public static void MathBook(int a) { Console.WriteLine("我是数学书" + a); } static void Main(string[] args) { myBookDel += Ma

Lambda expressions , Action , Func and Predicate

http://www.tutorialsteacher.com/csharp/csharp-action-delegate lambda 表达式 Action,func lambda表达式是什么,其有什么优点,不使用lambda 其的目的:简化代码. 在JAVA当中一般是使用接口来实现 Action is also a delegate type defined in the System namespace. An Action type delegate is the same as Fun

C#语法糖之第五篇: 泛型委托- Action&lt;T&gt;

因为工作的原因(其实还是个人的惰性)昨天没有给大家分享文章,然后这几天也有很多园友也提出了他们报告的意见及指导,再次感谢这些兄弟们的照顾我 和支持,这个分类的文章我当时想的是把我的学习经验和工作中用到的语法给大家分享给大家,希望能起到帮助的作用,但是本人也是个菜鸟,不是什么大神,所以 学习中也有不足的地方和没有扫到的地方,这里对上次扩展方法语法糖的问题,扩展方法确实是3.0开始就有了,或许是我以前没有用到,也没有查询欠缺,若要给大家带来不便,请大家原谅,现在把标题也修改为C#语法糖了,这里给大家

Lambda Action Func练习

namespace lambda { delegate void TestDelegate(string s); class Program { static void Main(string[] args) { //动态构建C# Lambda表达式例子1 var ints = new int[10] {10,2,3,4,5,2,34,54,4,40}; var newints = ints.Where(i => i > 20); foreach (var a in newints) { Co

C#学习笔记:泛型委托Action&lt;T&gt;和Fun&lt;TResult&gt;

转自:http://www.cnblogs.com/Joetao/articles/2094271.html 本节学习了泛型委托Action<T>和Fun<TResult>两类特殊的委托,这两个特殊的委托是Dot FrameWrok自带的.结合lambda表达式,可以在写程序时,简洁代码和提高编码效率. (一)Action<T>和Fun<TResult>两个委托的不同点: Action<T>只能委托必须是无返回值的方法 Fun<TResul