命令式编程和声明式编程区别
我是个新手,虽然在某个领域还算可以,但是在net,还算个新手。还需要向各位学习。
今天做了个例子, 是把相同地域的学生进行分组。想看看2种方式的区别,有很多不懂地方,还要向大侠请教。
有个方法是别人帮我编写的,还有些不懂。请教下。
实例代码
1 public class Student
2 {
3 public string Name { get; set; }
4 public string City { get; set; }
5 }
6
7 /// <summary>
8 /// 存放分组结果
9 /// </summary>
10 class StudentGroup
11 {
12 public string City;
13 public List<Student> Students = new List<Student>();
14 }
15
16 class Program
17 {
18 /// <summary>
19 /// 提取学生清单
20 /// </summary>
21 /// <returns></returns>
22 static IEnumerable<Student> GetStudents()
23 {
24 List<Student> students = new List<Student>
25 {
26 new Student {Name="张三", City="北京"},
27 new Student {Name="李四", City="上海"},
28 new Student {Name="王五", City="北京"},
29 new Student {Name="赵六", City="重庆"},
30 new Student {Name="马七", City="北京"} ,
31 new Student {Name="牛八", City="上海"}
32 };
33 return students;
34 }
35 /// <summary>
36 /// 按城市分组
37 /// </summary>
38 static void GroupStudentByCity()
39 {
40 var students = GetStudents();
41 var results = new List<StudentGroup>();
42
43 foreach (Student student in students)
44 {
45 StudentGroup res = results.Find(item => item.City == student.City);
46 if (res != null)
47 res.Students.Add(student);
48 else
49 {
50 StudentGroup newRes = new StudentGroup() { City = student.City };
51 newRes.Students.Add(student);
52 results.Add(newRes);
53 }
54 }
55
56 PrintResult(results);
57 }
58
59 /// <summary>
60 /// 输出结果
61 /// </summary>
62 /// <param name="Results"></param>
63 static void PrintResult(IEnumerable<StudentGroup> Results)
64 {
65
66 foreach (StudentGroup res in Results)
67 {
68 Console.WriteLine("============================");
69 Console.WriteLine("{0}的学生有{1}人:", res.City, res.Students.Count);
70 foreach (Student stu in res.Students)
71 Console.WriteLine(stu.Name);
72 Console.WriteLine();
73 }
74
75 }
76
77 /// <summary>
78 /// 对LINQ组进行处理
79 /// </summary>
80 /// <param name="group"></param>
81 /// <returns></returns>
82 static StudentGroup ProcessGroup(IGrouping<string, Student> group)
83 {
84 StudentGroup result = new StudentGroup { City = group.Key };
85 foreach (Student stu in group)
86 result.Students.Add(stu);
87 return result;
88 }
89
90 static void GroupStudentByCityUseLINQ()
91 {
92 var results = from student in GetStudents()
93 group student by student.City into grp
94 select ProcessGroup(grp); --不太懂
95
96 PrintResult(results);
97
98
99 }
100
101 static void Main(string[] args)
102 {
103 Console.WriteLine("使用命令式编程方式实现:\n");
104 GroupStudentByCity();
105
106 Console.ForegroundColor = ConsoleColor.Yellow;
107 Console.WriteLine("\n使用声明式编程方式实现:\n");
108 GroupStudentByCityUseLINQ();
109 Console.ReadKey();
110 }
111 }
写完这个程序,感觉用LINQ 确实带来很多方便。


浙公网安备 33010602011771号