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

List集合OrderBy数字+ThenBy布尔值排序失效问题求助

看起来你的排序逻辑没生效,我帮你梳理几个可能的问题和对应的修复方案:

可能的问题与修复建议

1. 未正确转换到实体类型(最可能的原因)

你声明的是List<Object>,但System.Object本身并没有Tag和Duplicate属性。如果你的实际元素是自定义实体类(比如Foo),直接在Object上访问这些属性要么会编译报错,要么运行时抛出异常,导致排序逻辑根本没执行。

修复方案:先将列表元素强制转换为你的实体类型,再执行排序:

public void updateAdapter() { 
    List<YourEntityType> foobar = db.Get(ObjectID).Cast<YourEntityType>().ToList(); 
    foobar = foobar.OrderBy(s => int.Parse(s.Tag))
                   .ThenByDescending(s => s.Duplicate)
                   .ToList(); 
    adapter = new ListAdapter(this, foobar); 
    RunOnUiThread(() => ...);
}

替换YourEntityType为你实际使用的类名,确保这个类确实有Tag(字符串类型)和Duplicate(布尔类型)属性。

2. Tag字段的整数转换问题

如果Tag不是有效的整数字符串(比如包含非数字字符、空值、超出int范围的数值),int.Parse()会抛出FormatException或OverflowException,中断排序流程。

修复方案:使用int.TryParse()确保转换安全,同时可以给无效值设置一个默认排序值(比如0,让它们排在最前面):

foobar = foobar.Cast<YourEntityType>()
               .OrderBy(s => {
                   int tagValue;
                   return int.TryParse(s.Tag, out tagValue) ? tagValue : 0;
               })
               .ThenByDescending(s => s.Duplicate)
               .ToList();

3. Duplicate是可空布尔类型(bool?)

如果Duplicate是bool?(可空布尔),ThenByDescending会把null值排在最后。如果你的需求是null也按false处理,或者需要调整排序顺序,可以显式处理:

.ThenByDescending(s => s.Duplicate.GetValueOrDefault(false))

或者如果想让null排在true后面、false前面:

.ThenByDescending(s => s.Duplicate.HasValue ? s.Duplicate.Value : false)

4. 确认列表是否被正确赋值

检查db.Get(ObjectID)返回的列表是否不为空,并且确实包含你需要排序的元素。可以在排序前加个日志或断点,确认原始列表的内容。

另外,LINQ的OrderBy和ThenByDescending会返回新的列表,你已经用ToList()赋值给foobar,这部分是正确的,不会有延迟执行的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:28:00