四个代码让你明白委托,匿名函数,Lamda表达式

先来一个你看不懂的代码:
namespace Delegate
{
 class 最终
    {
        public delegate string DelNames(string name);
        static void Main(string[] args)
        {
            string[] names = { "wUangWU", "ZhangSan", "LISI" };
            OperatorStr(names,(string name) => { name = name.ToUpper();return name; });
            Console.ReadKey();
        }
        public static void OperatorStr(string[] names, DelNames dns)
        {
            for (int i = 0; i < names.Length; i++)
               Console.WriteLine(dns(names[i]));
        }
    }
}

我相信对于没有这方面基础或刚学的人来说很难看懂,没关系,请看下面这个代码你一定看的懂

class 开始
    {
        static void Main(string[] args)
        {
            string[] names = { "wUangWU", "ZhangSan", "LISI" };
            ToUpperStr(names);
            //ToLowerStr(names);
            for (int i = 0; i < names.Length; i++)
                Console.WriteLine(names[i]);
            Console.ReadKey();
        }

        public static void ToUpperStr(string[] names)
        {
            for (int i = 0; i < names.Length; i++)
                names[i] = names[i].ToUpper();
        }
        public static void ToLowerStr(string[] names)
        {
            for (int i = 0; i < names.Length; i++)
                names[i] = names[i].ToLower();
        }
    }
}
这是中规中矩的代码,将字符串的大小写转换,再看下三个代码:
 class 委托的使用
    {
        public delegate void DelNames(string[] name);
        static void Main(string[] args)
        {
            string[] names = { "wUangWU", "ZhangSan", "LISI" };
            DelNames dns = new DelNames(ToUpperStr);
            DelNames dns1 = new DelNames(ToLowerStr);
            dns(names);
            dns1(names);
            for (int i = 0; i < names.Length; i++)
                Console.WriteLine(names[i]);
            Console.ReadKey();
        }

        public static void ToUpperStr(string[] names)
        {
            for (int i = 0; i < names.Length; i++)
                names[i] = names[i].ToUpper();
        }
        public static void ToLowerStr(string[] names)
        {
            for (int i = 0; i < names.Length; i++)
                names[i] = names[i].ToLower();
        }
    }

使用了委托


class 委托的简化V_3
    {
        public delegate string DelNames(string name);
        static void Main(string[] args)
        {
            string[] names = { "wUangWU", "ZhangSan", "LISI" };
            //DelNames dns = ToUpperStr;
            //对这一步的简化
            OperatorStr(names, delegate(string name)
            //加上string的原因是要指明函数的类型,使用的是那种类型的委托
            {
                name = name.ToUpper();
                return name;
            });
            //对这步骤的简化,在编译的时候自动new dns的实例化
            for (int i = 0; i < names.Length; i++)
                Console.WriteLine(names[i]);
            Console.ReadKey();
        }
        public static void OperatorStr(string[] names, DelNames dns)
        {
            for (int i = 0; i < names.Length; i++)
                //对这一步骤的简化,抽象出共同代码部分,实现函数作为参数
                names[i] = dns(names[i]);
        }
        //使用匿名函数减少代码量,只使用一次的时候,使用匿名函数    
    }
    class 委托的简化V_4
    {
        public delegate string DelNames(string name);
        static void Main(string[] args)
        {
            string[] names = { "wUangWU", "ZhangSan", "LISI" };
            // DelNames dns =(string name)=>
            //{
            //     name = name.ToUpper();
            //     return name;
            //  };
            //对这一步的简化(Lamda表达式和匿名函数的使用)
            OperatorStr(names, (string name) => { name = name.ToUpper(); return name; });
            Console.ReadKey();
        }
        public static void OperatorStr(string[] names, DelNames dns)
        {
            for (int i = 0; i < names.Length; i++)
                //对这一步骤的简化,抽象出共同代码部分,实现函数作为参数
                Console.WriteLine(dns(names[i]));
        }
        //使用匿名函数减少代码量,只使用一次的时候,使用匿名函数    
    }

我相信看到这里你应该懂了,快点动手试试




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值