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

如何对C#对象中作为属性的List按指定属性排序?

解决List按元素属性排序的问题

你的问题核心在于Subject集合声明为List,导致编译时无法识别元素的score属性,直接调用Sort的比较器或无参Sort都会失效,以下是具体解决方法:

方法一:改用强类型集合(推荐)

如果可以修改Student类的定义,把Subject的类型从List<Object>改为具体的实体类型(比如Subject类),这是最安全且高效的方式:

  1. 先定义Subject实体:
public class Subject
{
    public int score { get; set; }
    // 其他属性...
}
  1. 修改Student类的Subject属性类型:
public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
    public List<Subject> Subject { get; set; }
}
  1. 此时直接使用Sort方法即可生效:
result.Student[i].Subject.Sort((x, y) => x.score.CompareTo(y.score));

方法二:在现有List基础上处理

如果无法修改集合类型,可通过以下两种方式解决:

方式A:使用LINQ的OrderBy(生成新集合)

先将元素转换为具体类型,再通过OrderBy排序后重新赋值给Subject:

// 替换YourSubjectType为实际包含score属性的类型
result.Student[i].Subject = result.Student[i].Subject
    .Cast<YourSubjectType>()
    .OrderBy(s => s.score)
    .ToList();

方式B:使用dynamic类型进行排序(原地排序)

通过dynamic绕开编译时类型检查,直接访问score属性进行排序:

result.Student[i].Subject.Sort((x, y) => ((dynamic)x).score.CompareTo(((dynamic)y).score));

为什么原写法无效?

  • 无参Sort():Object类型未实现IComparable接口,无法进行默认排序,调用后集合顺序不会改变。
  • 带比较器的Sort():编译器无法识别Object类型的score属性,要么编译报错,要么运行时无法正确解析属性,导致排序逻辑不执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:37:05