使用匿名委托进行排序是怎么排序的


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#里的匿名函数它自己会直接执行了,而不是交给其他函数去调用执行
如果你需要交给其他函数去调用,只能通过委托

img

https://blog.csdn.net/qq_44028718/article/details/119976348

工作原理?
你教科书上写的各种排序就是他的工作原理,sort本身是快排算法
至于委托不委托跟sort没有关系,他仅仅只是把比较大小的工作交给外面来确定

也就是如果比较int这种原生就有大小的,你用你教科书上的快排就是他的原理
但是如果说比较一些原生就没有大小,比如我们比较两个美女,谁更美点。机器没有比较标准,所以使用一个委托,让你这个编写的人告诉他如何比较,但仅仅是也就是
if(a>b) 这一句是委托的作用,剩下的部分还是你教科书上快排