匿名函数、泛型委托、Lamda表达式

  //匿名函数 当某个函数只会执行一次时 可以写为匿名函数

            ProStr(names, delegate(stringname)

            {

                return "\"" + name + "\"";

            });

 

public delegate int DelCompare(object o1, object o2);

    class Program

    {

        static voidMain(string[] args)

        {

            object[] o= {"abc","fdsfdsds","fdsfdsfdsfdsfdsfds","fdsfds"};

            //object result = GetMax(o, Compare2);

            //object result = GetMax(o, delegate(object o1, objecto2) {

            //    string s1 =(string)o1;

            //    string s2 =(string)o2;

            //    returns1.Length - s2.Length;

            //});

 

            objectresult = GetMax(o, (object o1,object o2) => {

                string s1= (string)o1;

                string s2 =(string)o2;

                returns1.Length - s2.Length;

            });

            Console.WriteLine(result);

            Console.ReadKey();

        }

 

        public static objectGetMax(object[] nums, DelCompare del)

        {

            object max= nums[0];

            for (int i =0; i < nums.Length; i++)

            {

                //要传一个比较的方法

                if(del(max, nums[i]) < 0)

                {

                    max = nums[i];

                }

            }

            return max;

        }

}

用到Object就会发生拆装箱问题 

这时上面代码改一下  将所有类型都改为T

public delegate int DelCompare<T>(T t1, T t2);

    //public delegate int DelCompare(object o1, object o2);

    class Program

    {

        static voidMain(string[] args)

        {

            int[]nums = { 1, 2, 3, 4, 5 };

            int max= GetMax<int>(nums, Compare1);

            Console.WriteLine(max);

 

            string[]names = { "abcdefg", "fdsfds", "fdsfdsfdsfdsfdsfdsfdsfsd" };

            stringmax1 = GetMax<string>(names, (string s1, string s2) =>

            {

                returns1.Length - s2.Length;

            });

            Console.WriteLine(max1);

            Console.ReadKey();

        }

        public static TGetMax<T>(T[] nums, DelCompare<T> del)

        {

            T max = nums[0];

            for (int i =0; i < nums.Length; i++)

            {

                //要传一个比较的方法

                if(del(max, nums[i]) < 0)

                {

                    max = nums[i];

                }

            }

            returnmax;

        }

 

 

        public static intCompare1(int n1, int n2)

        {

            return n1- n2;

        }

}

 

 

Lamda表达式

static void Main(string[] args)

        {

            DelOne del= () => { };//delegate() { };

 

            DelTwodel2 = (string name) => { };//delegate(string name) { };

 

            DelThreedel3 = (string name) => { return name; };//delegate(stringname) { return name; };

 

 

            List<int>list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            list.RemoveAll(n => n > 4);

            foreach (varitem in list)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值