[英]Right method to check if DateTime is greater than another DateTime
我想检查CustomFormat中的DateTime是否大于另一个DateTime,但是在代码删除了很多项目之后,检查仍然可以,并且没有一个正确的方法。 这是我的代码。 这项工作是删除3天之前的所有ListViewItem。
for (int i = 0; i < lvValid.Items.Count; i++)
{
if (DateTime.Now.AddDays(-3) > DateTime.Parse(lvValid.Items[i].SubItems[1].Text))
{
lvValid.Items[i].Remove();
}
}
我已经尝试过foreach,但没有帮助。 它删除了第二个元素,但是它不正确
前向循环的一个大问题是,如果您删除一项,则其余项的索引将向左移动。 因此,在i == 1
,下一项将在移除后为1
。 然后, i
将被递增并跳过前一个下一个项目。
我建议使用反向循环:
for (int i = lvValid.Items.Count - 1; i >= 0 ; i--)
{
if (DateTime.Now.AddDays(-3) > DateTime.Parse(lvValid.Items[i].SubItems[1].Text))
{
lvValid.Items[i].Remove();
}
}
我个人建议使用原始数据。 首先根据您的条件过滤数据,然后重新填充ListView
。
也许你应该反向循环而不使用.AddDays(-3)
for (int i = lvValid.Items.Count - 1; i >= 0; i--)
{
if (DateTime.Now <= DateTime.Parse(lvValid.Items[i].SubItems[1].Text).AddDays(3);
{
lvValid.Items[i].Remove();
}
}
如果要使用正向循环(如果删除顺序很重要),则在不删除项目时应增加i++
:
// we don't want redrawing on each removing (i.e. lvValid blicking)
lvValid.BeginUpdate();
try
{
for (int i = 0; i < lvValid.Items.Count; ) // don't icrement i here...
if (DateTime.Now.AddDays(-3) > DateTime.Parse(lvValid.Items[i].SubItems[1].Text))
lvValid.Items[i].Remove();
else
++i; // ... but there
}
finally
{
// when finisihing removing, redraw lvValid if required
lvValid.EndUpdate();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.