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

C#中按价格排序嵌套列表?解决object类型索引报错问题

解决嵌套List排序时的索引器错误

嘿,这个问题我太熟悉了!你遇到的错误核心原因是:StationList是List<object>类型,所以在OrderBy的lambda表达式里,list被编译器识别为object——而object本身并没有索引器([]),自然就会抛出"Cannot apply indexing with [] to an expression of type 'object'"的错误。

下面给你两种解决方案,从临时修复到更规范的最佳实践:

方案一:临时强类型转换(快速解决)

如果你暂时不想改动数据结构,可以通过Cast把每个元素转换回List<object>,同时显式转换价格的类型(因为list[2]是object,需要转成int才能正确排序):

// 注意这里SortedList的类型要改成List<List<object>>
List<List<object>> SortedList = StationList
    .Cast<List<object>>() // 将每个object转成List<object>
    .OrderBy(list => (int)list[2]) // 显式转换为int类型
    .ToList();

⚠️ 注意:这种方法需要确保StationList里的每一个元素都是List<object>,并且第三个元素确实是int类型,否则运行时会抛出转换异常。

方案二:使用强类型实体类(推荐最佳实践)

用List<object>嵌套存储数据非常不优雅,不仅可读性差,还容易出现类型错误。更好的方式是创建一个专门的实体类来存储车站信息:

第一步:定义Station类

public class Station
{
    public string Name { get; set; }
    public string Area { get; set; }
    public int Price { get; set; }
}

第二步:初始化列表

List<Station> StationList = new List<Station>();
// 添加数据示例
StationList.Add(new Station 
{ 
    Name = "Central Station", 
    Area = "Downtown", 
    Price = 20 
});

第三步:排序

这时候排序就变得非常简洁直观,而且完全不会有类型问题:

List<Station> SortedList = StationList.OrderBy(s => s.Price).ToList();

这种方式的优势在于:

  • 编译时就能检查类型错误,避免运行时异常
  • 代码可读性大幅提升,别人一看就知道每个字段的含义
  • 后续扩展字段或者修改逻辑都更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:44:27