如何按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
相关产品推荐
相关产品推荐

