c#系统泛型委托

Action<T> 无返回值的系统泛型委托

namespace ConsoleApp1
{
    public class UserInfo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    class Program
    {
        private static List<UserInfo> getInit()
        {
            return new List<UserInfo>() {
                new UserInfo(){ Id=1, Name="001小王",Age=18 },
                new UserInfo (){ Id=2,Name="002大王",Age=20},
                new UserInfo (){ Id=3,Name="003笨笨",Age=21},
                new UserInfo (){ Id=4,Name="004通天塔",Age=24},
            };
        }
        static void Main(string[] args)
        {
            List<UserInfo> list = getInit();
            list.ForEach(new Action<UserInfo>(delegate (UserInfo ui) { Console.WriteLine(ui.Name); }));
            Console.WriteLine("----------------------------------------------------------------------------");
            list.ForEach(delegate (UserInfo ui) { Console.WriteLine(ui.Id+"|"+ui.Name); });
            Console.WriteLine("----------------------------------------------------------------------------");
            list.ForEach(u=> {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            Console.ReadLine();
        }
    }
}

Predicate<T> 返回bool值的系统泛型委托

namespace ConsoleApp1
{
    public class UserInfo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
   static  class Program
    {
        private static List<UserInfo> getInit()
        {
            return new List<UserInfo>() {
                new UserInfo(){ Id=1, Name="001小王",Age=18 },
                new UserInfo (){ Id=2,Name="002大王",Age=20},
                new UserInfo (){ Id=3,Name="003笨笨",Age=21},
                new UserInfo (){ Id=4,Name="004通天塔",Age=24},
            };
        }
        static void Main(string[] args)
        {
            #region
            List<UserInfo> list = getInit();
            list = list.FindAll(new Predicate<UserInfo>(delegate (UserInfo u) { return u.Id > 1; }));
            list.ForEach(u => {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            Console.WriteLine("----------------------------------------------------------------------------");
            list = list.FindAll(delegate (UserInfo u) { return u.Id > 2; });
            list.ForEach(u => {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            Console.WriteLine("----------------------------------------------------------------------------");
            list=list.FindAll(u => u.Id > 3);
            list.ForEach(u=> {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            #endregion

            Console.WriteLine("----------------------------自定义扩展方法---------------------------");
            List<UserInfo> listnew = list.MyFindAll<UserInfo>(delegate (UserInfo u) { return u.Id > 3; });
            listnew.ForEach(u => {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            Console.ReadLine();
        }

        static List<T> MyFindAll<T>(this List<T> list, Predicate<T> predicate)
        {
            //新集合
            List<T> newlist = new List<T>();
           //遍历老集合
            foreach (T item in list)
            {
                //如果item符合条件,则加入新集合
                if (predicate(item))
                {
                    newlist.Add(item);
                }
            }
            return newlist;
        }
    }
}

Comparison<T> 返回int类型

namespace ConsoleApp1
{
    public class UserInfo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
   static  class Program
    {
        private static List<UserInfo> getInit()
        {
            return new List<UserInfo>() {
                new UserInfo(){ Id=1, Name="001小王",Age=18 },
                new UserInfo (){ Id=2,Name="002大王",Age=20},
                new UserInfo (){ Id=3,Name="003笨笨",Age=21},
                new UserInfo (){ Id=4,Name="004通天塔",Age=24},
            };
        }
        static void Main(string[] args)
        {
            List<UserInfo> list = getInit();
            list.Sort(delegate (UserInfo u1, UserInfo u2) {
                return u2.Age - u1.Age;
            });
            list.ForEach(u =>
            {
                Console.WriteLine(u.Id + "|" + u.Name);
            });
            Console.ReadLine();
        }
    }
}

Func<T,TReturn> 自定义返回类型的系统泛型委托

namespace ConsoleApp1
{
    public class UserInfo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public class UserSimple
    {
        public string Name { get; set; }
    }
    static class Program
    {
        private static List<UserInfo> getInit()
        {
            return new List<UserInfo>() {
                new UserInfo(){ Id=1, Name="001小王",Age=18 },
                new UserInfo (){ Id=2,Name="002大王",Age=20},
                new UserInfo (){ Id=3,Name="003笨笨",Age=21},
                new UserInfo (){ Id=4,Name="004通天塔",Age=24},
            };
        }
        static void Main(string[] args)
        {
            List<UserInfo> list = getInit();
            IEnumerable<UserSimple> uslist = list.Select(new Func<UserInfo, UserSimple>(delegate (UserInfo u) { return new UserSimple() { Name = u.Name }; }));
            uslist.ToList().ForEach(us =>
            {
                Console.WriteLine( "|" + us.Name);
            });
            Console.WriteLine("----------------------------------------------------------------------------");
            IEnumerable<UserSimple> newuslist = list.Select(delegate (UserInfo u) { return new UserSimple() {  Name = u.Name }; });
            uslist.ToList().ForEach(us =>
            {
                Console.WriteLine( "|" + us.Name);
            });
            Console.WriteLine("-------------------------------------自定义-------------------------------");
            List<UserSimple> listnew = list.MySelect<UserInfo, UserSimple>(delegate(UserInfo u) { return new UserSimple() { Name = u.Name }; });
            listnew.ForEach(us =>
            {
                Console.WriteLine( "|" + us.Name);
            });
            Console.ReadLine();
        }
        static List<TR> MySelect<T1, TR>(this List<T1> list, Func<T1, TR> func)
        {
            List<TR> listnew = new List<TR>();
            foreach (T1 item in list)
            {
                TR tr = func(item);
                listnew.Add(tr);
            }
            return listnew;
        }
    }
}
时间: 2024-12-28 08:34:58

c#系统泛型委托的相关文章

委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录下来,以备复习使用. 委托: 日常工作中,常常见到委托用在具体的项目中.而且委托使用起来相对来说也是非常简单的,下面列举一个委托实例用以说明如何使用委托,代码如下: class Program { public delegate int CalculateDelegate(int x, int y)

委托应用及泛型委托和多播委托

一.委托一般作为方法的参数或者返回值,或者使用多播委托(注册多个方法,可以全部触发) 1.示例:根据对于字符串不同的处理方法逻辑 private delegate void PrintString(string str); static void PrintStr( PrintString print,string str ) { print(str); } static void Method1(string str) { Console.WriteLine(str); } static vo

c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada

匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回值的Action<T1,,,,Tn>和带返回值的Func<T1,,,Tn,Tresult> 实例代码 class demoFunc { /// <summary> /// 定义函数单条语句直接用lamada表达式 /// </summary> /// <p

C# 泛型委托和多播委托

泛型委托的定义 泛型委托的作用可以使程序定义一个委托,满足多个需求,如需要定义一个int类型参数的委托和定义一个string类型类型的委托时,直接使用泛型,就可以减少多次定义委托 泛型委托定义时候只需要再方法名后加:<类型在方法中的名字> 类型可以是多个,多个类型之间用 ”,“ 逗号隔开 // 定义泛型委托 delegate void MyDelegate<T>(T str); // 定义返回值为泛型的委托 delegate Y MyDelegate1<T, Y>(T

泛型委托当参数传递

假如有一个Person类: public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Title { get; set; } } 执行一个方法: /// <summary> /// 传递一个泛型委托方法 /// </summary> /// <param name="acti

泛型委托

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型委托 { public delegate int DelCompare<T>(T t1, T t2); // public delegate int DelCompare(object o1, object o2); class Progra

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下

大家知道泛型委托Action,是定义一个没有返回值的委托. 例如: public Action<int, int> AddAction = (x, y) => { Console.WriteLine(x+y); }; 定义一个Action 可以在Action上F12进入可以看到源码为: public delegate void Action<T1, T2>(T1 arg1, T2 arg2); 这里发现一个问题,T1,T2是什么类型呢,在哪里定义的,我按F12并没有找到对应的

C#语法糖之第六篇: 泛型委托- Predicate&lt;T&gt;、Func&lt;T&gt;

今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用

泛型委托学习进程

首先先回顾委托的使用过程步骤: 委托使用总结: (1)     委托声明(定义一个函数原型:返回值+参数类型和个数)注:在类的外部--中介(房产中介商) (2)     根据委托定义"具体"的方法------房源   注:在类中定义方法 (3)     创建委托对象,关联"具体方法"---中介商拥有房源  注意:在主函数中操作 第一种方式:使用new初始化.第二种方式:直接给委托变量赋值方法 (4)     通过委托去调用方法(而不是直接调用方法)------中介带