C# lamda表达式练习实例

2021-11-01 10:18:32 浏览数 (1)

用途以及优势:Lambda表达式在什么情况下用呢?

①当函数体特别简单,只有几个语句,不值当定义一个函数时,用Lambda表达式。

②Lambda表达式不用定义函数名,直接就是参数列表加函数体,对于有起名困难症的程序猿是个福音。

另外不用单独定义函数,代码也更简练。

③ 也是最重要的用法,防止函数名对命名空间的污染。函数名对命名空间的污染以后有机会会单独讲。

练习实例源码:

需加微信交流群的,请加小编微信号zls20210502,切记备注 加群,小编将会第一时间邀请你进群!(目前①群已满 ,需要在②群排队等坑位)

代码语言:javascript复制

class Program
    {
        private static List<Student> students;
        static void Main(string[] args)
        {
            students  = new List<Student>
                {
                new Student {Name = "Aaa",Age = 17 },
                new Student {Name = "Bbb",Age = 18 },
                new Student {Name = "Ccc",Age = 19 },
                new Student {Name = "Ddd",Age = 10 },
                new Student {Name = "Eee",Age = 100 },
                new Student {Name = "fff",Age = 5 },
                new Student {Name = "gGG",Age = 80 },
                };
            var studentData = students.Where(t => t.Name != null).OrderBy(t => t.Age).ToList();
            studentData = students.OrderBy(t => t.Age).ToList();
            IEnumerable<Student> LineData = from s in students where s.Age > 5 orderby s.Age select s;
            var LineData1 = from s in students where s.Age > 10 orderby s.Age select new { s.Age} ;
            studentData = LineData.ToList();
            foreach(var student in studentData)
            {
                Console.WriteLine($"学生姓名:{student.Name},学生年龄:{student.Age}");
            }
            Console.WriteLine($"n学生姓名:{studentData.FirstOrDefault().Name},学生年龄:{studentData.FirstOrDefault().Age}");
            Console.WriteLine($"学生姓名:{studentData.Last().Name},学生年龄:{studentData.Last().Age}");
            Console.WriteLine($"n");
            foreach (var Data1 in LineData1)
            {
                Console.WriteLine($"学生年龄:{Data1.Age}");
            }
            Console.ReadKey();
        }

        public   override string ToString()
        {
            return $"n学生姓名:{students.FirstOrDefault().Name},学生年龄:{students.FirstOrDefault().Age}";
        }
    }
    /// <summary>
    /// 定义实体类
    /// </summary>
    public class Student
    {
        /// 姓名
        public string Name { get; set; }
        /// 年龄
        public int Age { get; set; }
        /// 默认构造函数(如果提供了其他带参数的构造函数则必须显示申明默认构造函数)
       
 /// 带参数的构造函数
        /// <param name="name">姓名</param>
        /// <param name="age">年龄</param>
        public Student(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }

下面通过三种实现方式来对对比理解Lambda表达式的用途

假如我们想要从一个整型数组中取出其中是奇数的选项

方法一:命名方法

代码语言:javascript复制
 
public class Common 
{ 
public delegate bool IntFilter(int i); 
public static List<int> FilterArrayOfInt(int[] ints, IntFilter filter) 
{ 
var lstOddInt = new List<int>(); 
foreach (var i in ints) 
{ 
if (filter(i)) 
{ 
lstOddInt.Add(i); 
} 
} 
return lstOddInt; 
} 
}
代码语言:javascript复制
 
public class Application 
{ 
public static bool IsOdd(int i) 
{ 
return i % 2 != 0; 
} 
}

调用:

代码语言:javascript复制
 
var nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
var oddNums = Common.FilterArrayOfInt(nums, Application.IsOdd); 
foreach (var item in oddNums) 
{ 
Console.WriteLine(item); // 1,3,5,7,9 
}

方法二:匿名方法

代码语言:javascript复制
 
var oddNums = Common.FilterArrayOfInt(nums, delegate(int i) { return i % 2 != 0; });

方法三:Lambda表达式

代码语言:javascript复制
 
var oddNums = Common.FilterArrayOfInt(nums, i => i % 2 != 0);

很显然,使用Lambda表达式使代码更为简洁。

0 人点赞