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

如何按time键排序Dictionary<string, object>数组?报错找不到x.time

解决Dictionary<string, object>数组按time键排序的问题

问题根源

你写的x.time是错误的——因为x是Dictionary<string, object>类型,访问字典的键必须用索引器语法x["time"],而不是点运算符。另外Array.IndexOf(callHistory, x.time)完全是逻辑错误,这不是排序的正确写法。

正确排序方案

你的time是"dd.MM.yyyy HH:mm"格式的字符串,直接按字符串排序会导致日期顺序错乱(比如01.12.2024和30.11.2024,字符串排序会把前者放后面,但实际日期前者更晚),所以必须先把字符串转换为DateTime类型再排序,这样才能保证时间顺序正确。

最终代码

// 按时间升序排序(旧→新)
var sorted = callHistory.OrderBy(x => DateTime.ParseExact((string)x["time"], "dd.MM.yyyy HH:mm", null)).ToArray();

// 如果需要降序(新→旧),用OrderByDescending
var sortedDesc = callHistory.OrderByDescending(x => DateTime.ParseExact((string)x["time"], "dd.MM.yyyy HH:mm", null)).ToArray();

补充说明

  • DateTime.ParseExact用于严格按照指定格式解析字符串,避免因系统区域设置不同导致解析错误
  • 如果你能保证所有time值的格式绝对正确,可以直接用DateTime.Parse,但ParseExact更安全
  • 若坚持按字符串排序(不推荐),可以写:
    var sorted = callHistory.OrderBy(x => (string)x["time"]).ToArray();
    
    但这种方式仅当日期格式是yyyy.MM.dd HH:mm时才会正确排序,你的格式是dd.MM.yyyy,字符串排序逻辑和实际日期顺序不符,所以强烈建议转换为DateTime再排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:55:28