c# - 按时间顺序在列表中插入对象
问题描述
我有一个列表,其中包含具有DateTime
属性的对象。使用 aDataPicker
和 aTimePicker
创建一个DateTime
对象,然后将其插入到ObservableCollection<>
. 但是,我想相对于DateTime
. 如何找到合适的位置将其放入列表中?
public class HumorDiary
{
public DateTime Dt { get; set; }
}
HumorDiary obj= new HumorDiary();
obj.Dt= xx/xx/xxxx;
ObservableCollection<HumorDiary> listDiario = new ObservableCollection<HumorDiary>();
listDiario.Insert(Position????, obj);
解决方案
(测试代码后编辑答案。)
您可以自己对列表进行排序。
listDario.Add(obj);
listDario = new ObservableCollection<HumorDiary>(listDario.OrderBy(x => x.Dt));
令我惊讶的是,这实际上并没有触发额外的CollectionChanged
事件。但是,请注意,这会创建一个新列表,并且附加到该列表的事件处理程序可能会被取消链接。我还要说它不是非常有效。如果您根本不需要事件功能,请SortedList<TKey,TValue>
改用。
您也可以编写如下所示的扩展方法,但它假定列表已经排序,因此您必须确保每次插入都使用它。
public static void InsertByDate(this ObservableCollection<HumorDiary> source, HumorDiary obj)
{
int idx = 0;
while (idx < source.Count() && source[idx].Dt <= obj.Dt) {
idx += 1;
}
source.Insert(idx, obj);
}
推荐阅读
- google-cloud-platform - 上传到云存储 - 我是否遗漏了一些明显的东西?
- r - 如何在ggplot中突出显示曲线上的点
- git - 本地 Git 配置参数和 GitHub 帐户之间的区别?
- flutter - 如何在 Flutter 中使用 CircularNotchedRectangle 向 BottomAppBar 添加圆角
- javascript - 如何为我的图像幻灯片修复此代码?
- c++ - glfw 需要链接什么?
- rust - 如何在 Rust 中测试类型相等性?
- mysql - 完全访问用户的数据库权限错误
- python-3.x - AttributeError:硒上的“NoneType”
- java - 为什么 Quartz Scheduler 在 x 分钟后停止在 Heroku 上工作?