日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#——《C#语言程序设计》实验报告——综合练习——委托、Lambda表达式、LINQ、接口

發布時間:2024/10/5 C# 109 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#——《C#语言程序设计》实验报告——综合练习——委托、Lambda表达式、LINQ、接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

1、使用委托、Lambda表達式、LINQ等知識完成以下內容:(本題35分)

(1)要求定義Employee類,帶有Name屬性(string類型),帶有Birthday屬性(DateTime類型),帶有Salary屬性(double類型);重載ToString()方法,將信息以適當格式輸出。[8分]

(2)定義一個委托如下 :

delegate bool EmployeePredicate(Employee emp);

寫一個靜態方法FindEmployee,根據filter參數在數組中查找符合條件的Person實例,方法聲明為:[6分]

static List<Employee> FindEmployee(Employee[] emps, EmployeePredicate t)

(3)寫一個靜態方法FilterBySalary,使之符合委托EmployeePredicate定義,當Salary超過7000時返回true。[3分]

(4)在主方法中添加代碼,結合(2)和(3),將工資超過7000的員工找出來并打印。[3分]

(5)編寫一個靜態類MyExtensions,其中有一個靜態方法Eighties,擴展DateTime類型的功能。如日期符合“80后”定義則返回true,否則返回false。其中年份數據可通過 DateTime的Year屬性訪問到。[5分]

private static bool IsEighties(DateTime dt)

(6)利用(5)中擴展方法寫一個lambda表達式,調用(2)中方法,把80后員工找出來并打印。[5分]

(7)利用LINQ技術,把80后員工找出來,按工資從高到低排序,并打印。[5分]

主方法中已提供以下代碼和數據:

public static void Main(string[] argv){Employee[] employees = new Employee[] {new Employee { Name = "Damon", Birthday = new DateTime(1988, 5, 1), Salary = 4000 },new Employee { Name = "Niki", Birthday = new DateTime(1995, 10, 4), Salary = 7500 },new Employee { Name= "Ayrton", Birthday = new DateTime(1982, 6, 23), Salary = 9200 },new Employee { Name= "Graham", Birthday = new DateTime(1994, 9, 15), Salary = 6800 }};}

2、Array類的靜態Sort方法要求數組中的元素是可比較的。[16分]

1)擴展第1題中Employee類的功能,使之實現泛型IComparable<T>接口(其中定義了方法int CompareTo(T p)),按Salary進行比較。(第1題中已答出的代碼不需要重復寫。)[4分]

2)如果需要以其它方式對Employee對象進行排序,就需要自己創建一個類EmployeeComparer,實現泛型IComparer<T>接口(其中定義了方法int Compare(T a, T b)),它獨立于要比較的類,因此需要兩個參數進行比較。

寫個一EmployeeComparer類,繼承IComparer<T>,內部包含一個整型Sort屬性。當Sort為0時按Salary進行比較,為1時按Name排序,為2時按DateTime排序。其中string類和DateTime類均已實現IComparable接口。[8分]

3)在主方法中實現按Salary和Name的兩種排序。[4分]

解決方案

using System; using System.Collections.Generic; using System.Linq;namespace Homework20 {/**1、使用委托、Lambda表達式、LINQ等知識完成以下內容:(本題35分)(1)要求定義Employee類,帶有Name屬性(string類型),帶有Birthday屬性(DateTime類型),帶有Salary屬性(double類型);重載ToString()方法,將信息以適當格式輸出。[8分](2)定義一個委托如下 :delegate bool EmployeePredicate(Employee emp);寫一個靜態方法FindEmployee,根據filter參數在數組中查找符合條件的Person實例,方法聲明為:[6分]static List<Employee> FindEmployee(Employee[] emps, EmployeePredicate t)(3)寫一個靜態方法FilterBySalary,使之符合委托EmployeePredicate定義,當Salary超過7000時返回true。[3分](4)在主方法中添加代碼,結合(2)和(3),將工資超過7000的員工找出來并打印。[3分](5)編寫一個靜態類MyExtensions,其中有一個靜態方法Eighties,擴展DateTime類型的功能。如日期符合“80后”定義則返回true,否則返回false。其中年份數據可通過 DateTime的Year屬性訪問到。[5分]private static bool IsEighties(DateTime dt)(6)利用(5)中擴展方法寫一個lambda表達式,調用(2)中方法,把80后員工找出來并打印。[5分](7)利用LINQ技術,把80后員工找出來,按工資從高到低排序,并打印。[5分]主方法中已提供以下代碼和數據:public static void Main(string[] argv){Employee[] employees = new Employee[] {new Employee { Name = "Damon", Birthday = new DateTime(1988, 5, 1), Salary = 4000 },new Employee { Name = "Niki", Birthday = new DateTime(1995, 10, 4), Salary = 7500 },new Employee { Name= "Ayrton", Birthday = new DateTime(1982, 6, 23), Salary = 9200 },new Employee { Name= "Graham", Birthday = new DateTime(1994, 9, 15), Salary = 6800 }};}*//**2、Array類的靜態Sort方法要求數組中的元素是可比較的。[16分]1)擴展第1題中Employee類的功能,使之實現泛型IComparable<T>接口(其中定義了方法int CompareTo(T p)),按Salary進行比較。(第1題中已答出的代碼不需要重復寫。)[4分]2)如果需要以其它方式對Employee對象進行排序,就需要自己創建一個類EmployeeComparer,實現泛型IComparer<T>接口(其中定義了方法int Compare(T a, T b)),它獨立于要比較的類,因此需要兩個參數進行比較。寫個一EmployeeComparer類,繼承IComparer<T>,內部包含一個整型Sort屬性。當Sort為0時按Salary進行比較,為1時按Name排序,為2時按DateTime排序。其中string類和DateTime類均已實現IComparable接口。[8分]3)在主方法中實現按Salary和Name的兩種排序。[4分]*/class Employee : IComparable<Employee>{public string Name;public DateTime Birthday;public double Salary;public override string ToString(){return string.Format("{0}: Salary={1}, Birthday={2}", Name, Salary, Birthday);}public int CompareTo(Employee emp){return (int)(Salary - emp.Salary);}}public static class MyExtensions{public static bool IsEighties(this DateTime d){return d.Year > 1979 && d.Year < 1990;}}class EmployeeComparer : IComparer<Employee>{public int Sort { get; set; }public EmployeeComparer(int sort){Sort = sort;}public int Compare(Employee e1, Employee e2){switch (Sort){case 0:return (int)(e1.Salary - e1.Salary);case 1:return e1.Name.CompareTo(e2.Name);default:return e1.Birthday.CompareTo(e2.Birthday);}}}class Program{delegate bool EmployeePredicate(Employee emp);static List<Employee> FindEmployee(Employee[] emps, EmployeePredicate t) {List<Employee> results = new List<Employee>();foreach (Employee p in emps){if (t(p))results.Add(p);}return results;}private static bool FilterBySalary(Employee emp) {return emp.Salary > 7000;}public static void Main(string[] args){Employee[] employees = new Employee[] {new Employee { Name = "Damon", Birthday = new DateTime(1988, 5, 1), Salary = 4000 },new Employee { Name = "Niki", Birthday = new DateTime(1995, 10, 4), Salary = 7500 },new Employee { Name= "Ayrton", Birthday = new DateTime(1982, 6, 23), Salary = 9200 },new Employee { Name= "Graham", Birthday = new DateTime(1994, 9, 15), Salary = 6800 }};List<Employee> high = FindEmployee(employees, FilterBySalary);foreach (Employee emp in high)Console.WriteLine(emp);List<Employee> eighties = FindEmployee(employees, p => p.Birthday.IsEighties());foreach (Employee emp in eighties)Console.WriteLine(emp);var eighties2 = from emp in employeeswhere emp.Birthday.IsEighties() == trueorderby emp.Salary descendingselect emp;foreach (Employee emp in eighties2)Console.WriteLine(emp);Array.Sort(employees);foreach (Employee emp in employees)Console.WriteLine(emp);Array.Sort(employees,new EmployeeComparer(1));foreach (Employee emp in employees)Console.WriteLine(emp);Console.WriteLine("Hello World!");}} }

參考答案

//1、 //(1)class Employee{public string Name { get; set; }public DateTime Birthday { get; set; }public double Salary { get; set; }public override string ToString(){return string.Format("{0}: Salary={1}, Birthday={2}", Name, Salary, Birthday);}} //(2)private static List<Employee> FindEmployee(Employee[] ps, EmployeePredicate t){List<Employee> results = new List<Employee>();foreach (Employee p in ps){if (t(p))results.Add(p);}return results;} //(3)private static bool FilterBySalary(Employee emp){return emp.Salary >= 7000;} //(4)List<Employee> high = FindEmployee(employees, FilterBySalary);foreach(Employee emp in high)Console.WriteLine(emp); //(5)public static class MyExtensions{public static bool IsEighties(this DateTime d){return d.Year > 1979 && d.Year < 1980;}} //(6)List<Employee> eighties = FindEmployee(employees, p => p.Birthday.IsEighties());foreach(Employee emp in eighties)Console.WriteLine(emp); //(7)var eighties2 = from emp in employeeswhere emp.Birthday.IsEighties() == trueorderby emp.Salary descendingselect emp;foreach (Employee emp in eighties2)Console.WriteLine(emp); //2、class Employee : IComparable<Employee>{public string Name { get; set; }public DateTime Birthday { get; set; }public double Salary { get; set; }public override string ToString(){return string.Format("{0}: Salary={1}, Birthday={2}", Name, Salary, Birthday);}public int CompareTo(Employee emp){return (int)(Salary - emp.Salary);}}class EmployeeComparer : IComparer<Employee>{public int Sort { get; set; }public EmployeeComparer(int sort){Sort = sort;}public int Compare(Employee e1, Employee e2){switch(Sort){case 0:return (int)(e1.Salary - e1.Salary);case 1:return e1.Name.CompareTo(e2.Name);default:return e1.Birthday.CompareTo(e2.Birthday);}}}

?

運行結果?

參考文章

https://www.cnblogs.com/skm-blog/p/4229487.html

https://www.cnblogs.com/forever-Ys/p/10315830.html

總結

以上是生活随笔為你收集整理的C#——《C#语言程序设计》实验报告——综合练习——委托、Lambda表达式、LINQ、接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。