美文网首页
C#内置泛型委托

C#内置泛型委托

作者: ottox | 来源:发表于2018-11-13 21:53 被阅读11次

Action

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

Action 表示无参,无返回值的委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值。

public void Test<T>(Action<T> action,T p)
{
action(p);
}

static void Main(string[] args)
        {
       #region Action<T>委托示例
            //需求:打印出整型集合list的元素
            List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
            //将匿名方法分配给 Action<T> 委托实例
            Action<int> concat1 = delegate(int i) { Console.WriteLine(i); };
            list.ForEach(concat1);
            //将 lambda 表达式分配给 Action<T> 委托实例
            Action<int> concat2 = (i => Console.WriteLine(i));
            list.ForEach(concat2);
            Console.ReadKey();
        #endregion 
        }

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

public int Test<T1,T2>(Func<T1,T2,int>func,T1 a,T2 b)
{
return func(a, b);
}


static void Main(string[] args)
        {
            #region Func<T,TResult>委托示例
            //需求:查找整型集合list中大于3的所有元素组成的新集合,并打印出集合元素
            List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
            //将匿名方法分配给 Func<T,TResult> 委托实例
            Func<int, bool> concat1 = delegate(int i) { return i > 3; };
            var newlist1 = list.Where(concat1).ToList();
            //将 Lambda 表达式分配给 Func<T,TResult> 委托实例
            Func<int, bool> concat2 = i => i > 3;
            var newlist2 = list.Where(concat2).ToList();
            newlist1.ForEach(i => Console.WriteLine(i.ToString()));
            newlist2.ForEach(i => Console.WriteLine(i.ToString()));
            Console.ReadKey();
            #endregion
        }

predicate

predicate 是返回bool型的泛型委托

predicate<int> 表示传入参数为int 返回bool的委托

Predicate有且只有一个参数,返回值固定为bool

public delegate bool Predicate<T> (T obj)

static void Main(string[] args)
        {
            #region  Predicate<T>委托示例
            //需求:查找整型集合list中大于3的所有元素组成的新集合,并打印出集合元素
            List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
            //将匿名方法分配给 Predicate<T> 委托实例
            Predicate<int> concat1 = delegate(int i) { return i > 3; };
            var newlist1 = list.FindAll(concat1);
            //将 lambda 表达式分配给 Predicate<T> 委托实例
            Predicate<int> concat2 = (c => c > 3);
            var newlist2 = list.FindAll(concat2);
            newlist1.ForEach(i => Console.WriteLine(i));
            newlist2.ForEach(i => Console.WriteLine(i));
       Console.ReadKey();
            #endregion
        }

Comparison

表示比较同一类型的两个对象的方法

public delegate int Comparison<T>(T x, T y);

static void Main(string[] args)
        {
            #region  Comparison<T>委托示例
            //需求:将整型集合list中的所有元素倒序排列打印出来
            List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
            //将匿名方法分配给 Comparison<T> 委托实例
            Comparison<int> concat1 = delegate(int i, int j) { return j - i; };
            //将 lambda 表达式分配给 Comparison<T> 委托实例
            Comparison<int> concat2 = (i, j) => j - i;
            list.Sort(concat1);
            list.ForEach(c => Console.WriteLine(c.ToString()));
            list.Sort(concat2);
            list.ForEach(c => Console.WriteLine(c.ToString()));
       Console.ReadKey();
            #endregion
        }

总结:

Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型

Func可以接受0个至16个传入参数,必须具有返回值

Action可以接受0个至16个传入参数,无返回值

Predicate只能接受一个传入参数,返回值为bool类型
Comparison<T>委托封装一个方法,该方法传入一个类型参数,这个参数是指要比较的对象的类型,此类型参数是逆变,同时接收两个同类型的参数(这两个参数就是要比较的两个对象,参数的类型就是传入的类型参数的类型),始终返回int类型的值,即一个有符号整数,指示 x 与 y 的相对值,如下表所示。

含义
小于0 x 小于y
0 x 等于y
大于0 x 大于y

详细参考:http://www.cnblogs.com/akwwl/p/3232679.html
https://www.cnblogs.com/0weibin/p/3955207.html

相关文章

  • C#内置泛型委托

    Action Action是无返回值的泛型委托。 Action 表示无参,无返回值的委托 Action 表示有传...

  • 2020-02-19

    C# 委托 (一)—— 委托、 泛型委托与Lambda表达式 原创wnvalentin 最后发布于2018-08-...

  • C#——委托与事件系列一

    本来应该学习泛型与委托的,但是发现C#这里还没有系统的记录过委托与事件,所以先打算把委托与事件补上再继续泛型与委托...

  • C#泛型委托

    任务: (1)找出int数组里面最大值的那个元素(2)找出string数组里面最长的那个元素(3)找出Person...

  • 目录 - C#

    总目录 C# 第01局:泛型 C# 第02局:反射 C# 第03局:特性 C# 第04局:委托 C# 第05局:事...

  • C#基础提升系列——C#泛型

    C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate...

  • 举例说明C#中的委托如何使用

    委托回调静态方法和实例方法 泛型委托之Action泛型委托之Func Funcfunc = new Func(Pe...

  • 《C#学习笔记》的笔记

    适合在校生阅读,也适合有工作经验但基础不扎实的人温故知新。 C# 1.0 事件、委托C# 2.0 泛型、可空类型、...

  • C#---API-02(Application Programm

    一、泛型概述 1. 泛型 1.1 泛型是什么? 泛型(generic)是C#语言2.0和通用语言运行时(CLR)得...

  • TS 笔记九 泛型

    参考C# 泛型 泛型与非泛型集合[https://www.jianshu.com/p/e45e7573f928] ...

网友评论

      本文标题:C#内置泛型委托

      本文链接:https://www.haomeiwen.com/subject/avrrfqtx.html