• 小例子学习C#委托和Lambda表达式


    首先提出一个问题:给你很多的姓名,让你找出一个姓氏的所有人,用程序实现。

    这个程序用很多方法可以实现,这篇博文中,我们就利用委托和Lambda表达式的方法实现。

    首先把所有的姓名放到一个集合中

     List<string> list = new List<string> { "田三涛", "刘起涵", "张晓轩", "田圣彤", "文筠彤", "刘起涵", "田优乔", "文嘉珊", "白田彤", "廖子棉", "张泽菲", "田赞鑫" };

    然后利用List<T>的FindAll(Predicate<T> match)方法找到所有符合姓“田”的字符串。Predicate<T> 是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。 当前 List<T> 的元素被逐个传递给 Predicate<T> 委托,满足条件的元素被保存在返回的 List<T> 中。

    下面我分别用C#1.0,C#2.0,C#3.0的方法完成我们的程序。

    C#1.0

    先定义一个静态方法,代码如下:

            public static bool IsMatch(string s)
            {
                return s.IndexOf("田") == 0;
            }

    通过调用list.FindAll(IsMatch),找到所有姓氏为“田”的字符串。

    C#2.0

    直接写成如下代码即可

    list.FindAll(delegate(string s)
                 {
                     return s.IndexOf("田") == 0;
                 });

    C#3.0,Lambda表达式

    写成如下形式

    list.FindAll(s => s.IndexOf("田") == 0);

    完整的程序代码:

     class Program
        {
            static void Main(string[] args)
            {
                List<string> list = new List<string> { "田三涛", "刘起涵", "张晓轩", "田圣彤", "文筠彤", "刘起涵", "田优乔", "文嘉珊", "白田彤", "廖子棉", "张泽菲", "田赞鑫" };
    
                //C#1.0
                //List<string> result = list.FindAll(IsMatch);
    
                //C#2.0
                //List<string> result = list.FindAll(delegate(string s)
                // {
                //     return s.IndexOf("田") == 0;
                // });
    
                //C#3.0
                List<string> result = list.FindAll(s => s.IndexOf("田") == 0);
                foreach (var item in result)
                {
                    Console.WriteLine(item);
                }
            }
    
            public static bool IsMatch(string s)
            {
                return s.IndexOf("田") == 0;
            }
        }

    通过比较C#1.0,C#2.0,C#3.0对程序的实现,我们发现C#越来越人性化,更加符合人的思维方式。

  • 相关阅读:
    Novell 被收购
    NetBeans IDE 7.0 Beta 发布
    关于去除PE文件中函数修饰的做法
    甲骨文宣布将于明年 7 月 28 日推 JDK 7
    PE文件格式的一些研究
    如何开发 Web 应用程序
    Novell 被收购
    如何开发 Web 应用程序
    分享:DFC开发平台的设计理念
    分享:FireBreath 1.7.0 RC1 发布
  • 原文地址:https://www.cnblogs.com/nianming/p/2104021.html
Copyright © 2020-2023  润新知