首页 > 解决方案 > C# 排序列表通过它的属性,即日期时间字符串

问题描述

我有一个列表,该列表的每个项目都是用户定义的类,它具有类型为字符串但其内容为日期时间的属性,如下所示;

StringAsDate="23/10/2020 17:12:00"

类未知{ ..., StringAsDate, ... }

T列表列表

我想对列表进行降序排序,该列表是容器 DateTime 的字符串,我必须在最后保留列表的格式。

我可以通过蛮力做到这一点,但我正在寻找高效和优雅的方式。

谢谢。

标签: c#listsorting

解决方案


根据您对答案的评论,您正在寻找基于反射的解决方案。

反射部分,根据名称获取属性的值:

x.GetType().GetProperty(propertyName).GetValue(x, null)

试试这个:

var propetyName = "StringAsDate";
var listSorted = list.OrderByDescending(x => DateTime.Parse(Convert.ToString(x.GetType().GetProperty(propertyName).GetValue(x, null))));

如果Property已经是类型,则DateTime强制转换就足够了

var propetyName = "StringAsDate";
var listSorted = list.OrderByDescending(x => (DateTime)x.GetType().GetProperty(propertyName).GetValue(x, null));

推荐阅读