zoukankan      html  css  js  c++  java
  • C#

    前言
      1、"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量,lambda表达式简化了匿名委托的使用。
      2、它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。
    简洁
      lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
      lambda表达式:
        1.一个参数:param => expr
        2.多个参数:(param, list) => expr

    namespace study_lambda
    {
        /// <summary>
        /// 委托跟表达式的两段代码,我们可以看出一些东东吧:其实表达式(p => p + 10;)中的 p 就代表委托方法中的参数,而表达式符号右边的 p+10,就是委托方法中的返回结果。
        /// </summary>
        class LambdaPrinciple
        {
            delegate int HuaQian(int money);
    
            // 委托
            void Test()
            {
                HuaQian hq = HqTest;
                int money = hq(10);
            }
            public int HqTest(int money)
            {
                return money + 10;
            }
    
            //表达式
            void Test2()
            {
                HuaQian hq = p => p + 10;
                int money = hq(10);
            }
    
            delegate int HuaQian1(int money, int money2);
            //多参数
            void Test3() {
                HuaQian1 hq = (p, m) => p + m;
                int money = hq(1, 2);
            }
    
            //lambda主体运算复杂 
            void Test4() {
                HuaQian1 hq = (p, m) => {
                    if (p < 0)
                    {
                        return m;
                    }
                    else
                    {
                        return p + m;
                    }
                };
            }
        }
    
    }
    

      

    using System.Collections.Generic;
    
    namespace study_lambda
    {
        class Employee
        {
            public string Name { get; set; }
            public string Code { get; set; }
            public int Age { get; set; }
            public Employee(string name, string code, int age)
            {
                Name = name;
                Code = code;
                Age = age;
            }
            public static List<Employee> CreateEmployees()
            {
                List<Employee> employees = new List<Employee>();
                Employee employee = new Employee("gongyg", "SC0001", 29);
                employees.Add(employee);
                employee = new Employee("gumd", "SC0002", 31);
                employees.Add(employee);
                employee = new Employee("gongxy", "SC0003", 3);
                employees.Add(employee);
                employee = new Employee("gongxh", "SC0004", 1);
                employees.Add(employee);
                employee = new Employee("gongyg", "SC0005", 29);
                employees.Add(employee);
                return employees;
            }
    
            public override string ToString()
            {
                return Name + "-" + Code + "-" + Age;
            }
        }
        class Score
        {
            public string Code { get; set; }
            public string Project { get; set; }
            public int ProjectScore { get; set; }
            public Score(string code, string project, int projectScore)
            {
                Code = code;
                Project = project;
                ProjectScore = projectScore;
            }
            public static List<Score> CreateScores()
            {
                List<Score> scores = new List<Score>();
                Score score = new Score("SC0001", "数学", 89);
                scores.Add(score);
                score = new Score("SC0001", "语文", 49);
                scores.Add(score);
                score = new Score("SC0001", "英语", 29);
                scores.Add(score);
                score = new Score("SC0002", "数学", 68);
                scores.Add(score);
                score = new Score("SC0003", "数学", 73);
                scores.Add(score);
                score = new Score("SC0004", "数学", 56);
                scores.Add(score);
                return scores;
            }
        }
    }
    
    using System.Collections.Generic;
    using System.Linq;
    
    namespace study_lambda
    {
        /// <summary>
        /// List集合中的Lambda表达式的运用
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                List<Employee> employees = Employee.CreateEmployees();
                List<Score> scores = Score.CreateScores();
    
                //查询
                List<Employee> emps = employees.Where(p => p.Age > 20 || p.Name == "gongxy" || p.Name.Contains("g")).ToList();
    
                //返回第一个符合条件的数据,不存在的时候返回Null。
                //当查询条件能查到多个时,直接报异常
                Employee emp = employees.SingleOrDefault(p => p.Name == "gumd1");
    
                //返回第一个符合条件的数据,不存在的时候返回Null。
                Employee emp2 = employees.FirstOrDefault(p => p.Name == "gongyg");
    
                //排序
                //string.Join(',', emps2)
                //OrderBy 从小到大
                //OrderByDescending 从大到小
                List<Employee> emps2 = employees.OrderBy(p => p.Age).ToList();
                List<Employee> emps3 = employees.OrderByDescending(p => p.Age).ToList();
    
                //返回符合条件的实体个数
                int employeeNumber = employees.Count(p => p.Age >= 20);
    
                //查找所有名字中含有【g】的实体集合
                List<Employee> emps4 = employees.FindAll(p => p.Name.Contains("g")).ToList();
                List<IGrouping<string, Employee>> strs = employees.GroupBy(p => p.Name).ToList();
                foreach (IGrouping<string, Employee> item in strs)
                {
                    string key = item.Key;
                }
    
                //返回最大的年龄
                int age = employees.Max(p => p.Age);
    
                //对所有年龄求和
                int ageSum = employees.Sum(p => p.Age);
    
                //求年龄的平均值
                double ageAvg = employees.Average(p => p.Age);
    
                //获取所有学生姓名,并去重
                List<string> strs2 = employees.Select(p => p.Name).Distinct().ToList();
                //匿名类型
                var emps5 = employees.Select(p => new { p.Name, p.Code });
                foreach (var item in emps5)
                {
                    string name = item.Name;
                    string code = item.Code;
                }
            }
        }
    }
    

      

  • 相关阅读:
    微信端支付
    flex布局
    最近的一些计划
    工作中遇到的一些小问题
    获取url参数
    localStorage中使用json
    倒计时函数(单个和多条)
    刚进入页面强制刷新
    [模板][倍增] ST算法 RMQ 区间中最大得值
    [思维]奇数码问题
  • 原文地址:https://www.cnblogs.com/gygtech/p/13915388.html
Copyright © 2011-2022 走看看