using System;
using System.Collections.Generic;
namespace ConsoleApp3
{
public class Student
{
public int id { get; set; }
public string name { get; set; }
public int age { get; set; }
public Student(int id, string name, int age)
{
this.id = id;
this.name = name;
this.age = age;
}
public void ShowInfo(string info)
{
Console.WriteLine("{0}:\n{1}", info, this.ToString());
}
}
class Program
{
public delegate void TestDelegate(string info);
static void Main(string[] args)
{
//创建一个泛型列表, 列表中的元素类型为Student
List<Student> stuList = new List<Student>();
stuList.Add(new Student(3, "张三", 20));
stuList.Add(new Student(1, "李四", 15));
stuList.Add(new Student(2, "王五", 18));
//遍历并输出
foreach (var stu in stuList)
{
Console.WriteLine(stu.name);
}
Console.WriteLine("排序后:");
//使用匿名委托完成排序
stuList.Sort(delegate (Student s1, Student s2)
{
return s2.age - s1.age;
});
//遍历并输出
foreach (var stu in stuList)
{
Console.WriteLine(stu.name);
}
}
}
}
这段代码说的使用匿名委托进行排序是怎么排序的?工作原理是什么?谢谢指点!
stuList.Sort里需要传递一个函数,这个函数告诉sort要以什么规则进行排序
它需要两个参数,一个返回值
参数就是参与排序的对象,返回值用来比较大小,小的排在前,大的排在后
而匿名委托不过就是充当这个传入的函数而已
因为c#是强类型的编程语言,你不可以把函数名直接当参数使用,必须使用委托来执行函数
-=-=-=-
如果是python,这里你就可以直接传递一个匿名函数了
而c#里的匿名函数它自己会直接执行了,而不是交给其他函数去调用执行
如果你需要交给其他函数去调用,只能通过委托
https://blog.csdn.net/qq_44028718/article/details/119976348
工作原理?
你教科书上写的各种排序就是他的工作原理,sort本身是快排算法
至于委托不委托跟sort没有关系,他仅仅只是把比较大小的工作交给外面来确定
也就是如果比较int这种原生就有大小的,你用你教科书上的快排就是他的原理
但是如果说比较一些原生就没有大小,比如我们比较两个美女,谁更美点。机器没有比较标准,所以使用一个委托,让你这个编写的人告诉他如何比较,但仅仅是也就是
if(a>b) 这一句是委托的作用,剩下的部分还是你教科书上快排