繁体   English   中英

正确的方法来检查DateTime是否大于另一个DateTime

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM