You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Comparison委托对类的String属性排序?代码异常求助

解决Comparison委托实现Student姓名排序失效的问题

你遇到的排序失效问题,核心原因是CompareNames方法里的比较逻辑写错啦!

问题定位

看你写的比较方法:

public static int CompareNames(student std1, student std2) {
    return std1.name.CompareTo(std1.name);
}

这里你把std1.name和它自己做比较,返回值永远是0(表示两个对象相等),所以List调用Sort后根本不会调整元素顺序,自然达不到按姓名字母序排序的效果。

修正方案

只需要把比较的对象改成std2.name就可以解决:

public static int CompareNames(student std1, student std2) {
    return std1.name.CompareTo(std2.name);
}

更简洁的写法(可选)

其实没必要单独写一个方法,直接用Lambda表达式创建Comparison委托会更简洁,代码更紧凑:

// 直接在Sort方法中传入Lambda表达式,省去中间委托变量
studentList.Sort((std1, std2) => std1.name.CompareTo(std2.name));

额外小建议

  1. 遵循C#命名规范:类名和属性名建议用大驼峰(比如把student改成Student,name改成Name),这样代码可读性更高。
  2. 如果需要不区分大小写的排序,可以用string.Compare方法替代CompareTo:
    studentList.Sort((std1, std2) => string.Compare(std1.name, std2.name, StringComparison.OrdinalIgnoreCase));
    

修正后的完整代码示例:

using System;
using System.Collections.Generic;

namespace comparisionProject {
    public class Student {
        public int SId { get; set; }
        public string Name { get; set; }
        public int FullMarks { get; set; } = 600;
        public int Marks { get; set; }
    }

    public class Tester {
        static void Main(string[] args) {
            Student s1 = new Student(){SId=101 , Name = "kalu",Marks = 456 };
            Student s2 = new Student(){SId = 102, Name = "balu", Marks = 562};
            Student s3 = new Student(){SId = 103, Name= "golu", Marks = 432};
            Student s4 = new Student(){SId = 104, Name= "aalu", Marks = 432};

            List<Student> studentList = new List<Student>(){s1,s2,s3,s4};
            
            // 使用Lambda表达式实现排序
            studentList.Sort((std1, std2) => std1.Name.CompareTo(std2.Name));

            foreach (Student item in studentList) {
                Console.WriteLine($"{item.SId} {item.Name} {item.FullMarks} {item.Marks}");
            }
        }
    }
}

运行后就能得到按姓名字母序排列的结果:aalu、balu、golu、kalu,完全符合你的预期。

内容的提问来源于stack exchange,提问作者sikka karma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:38:19