如何检测List被改变了?最后添加的项是什么

本文关键字:改变 最后 添加 是什么 何检测 检测 string List | 更新日期: 2023-09-27 18:14:44

我有一个计时器滴答事件:

private void timer2_Tick(object sender, EventArgs e)
{
    combindedString = string.Join(Environment.NewLine, ListsExtractions.myList);
    richTextBox1.SelectAll();
    richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
    richTextBox1.Text = combindedString;
}

定时器设置为50000,时间一直重复运行。现在,当我运行我的程序时,List<string> myList有,例如,3项:

Index 0: Hello world
Index 1: 24/7/2014 21:00
Index 2: http://test.com

50秒后,有两个选项:要么List未更改,要么List已更改/更长。如果没有更改,什么也不做,但如果更改,则获取最新添加的项。例如,如果列表现在已更改为…

Index 0: This is the latest item added in index 0
Index 1: 24/7/2014 22:00
Index 2: http://www.google.com
Index 3: ""
Index 4: Hello world
Index 5: 24/7/2014 21:00
Index 6: http://test.com

…然后我需要做另外两个动作:

  1. 第一次运行程序时,检查最近的项(本例中Index 0处的字符串)是否包含两个单词/字符串。如果有,那就做点什么,否则什么都不做。
    但是,如果它确实包含单词/字符串,并且我们确实"做某事",则只在50秒后做一次;

  2. 即使索引0中的单词/字符串再次存在,也不要再这样做。
  3. 50秒后,如果列表发生变化,并且在Index 0中存在此单词/字符串,则在50秒后再做一些事情。如果List没有改变,即使索引0中的单词/字符串仍然存在,也不要再这样做。

    if (rlines[0].Contains("צבע אדום") || rlines[0].Contains("אזעקה"))
    {
        timer3.Start();            
    }
    

只有当索引0中存在一个单词/字符串时,我才想启动timer3

如果50秒后没有任何变化,请不要再次启动timer3

只有在50秒或更晚的时间后,List发生了变化,并且索引0中再次存在一个单词/字符串,才再次启动定时器3

如何检测List<string>被改变了?最后添加的项是什么

Generic List<T>类不支持列表更改通知。
你要找的是ObservableCollection<T>
它有一个CollectionChanged,当集合被修改时触发。

你可以这样使用它:

using System.Collections.ObjectModel;
ObservableCollection<string> myList;
//The cnstructor 
public MyClassname()
{
  this.myList = new ObservableCollection<string>();
  this.myList.CollectionChanged += myList_CollectionChanged;
}
void myList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
        //list changed - an item was added.
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        {
            //Do what ever you want to do when an item is added here...
            //the new items are available in e.NewItems
        }
}

要检测您的list是否被更改,请使用以下命令检查列表项计数:你必须有temp变量包含当前列表项计数:

int temp = list.Count;//获取List中包含的元素的个数。

然后添加item:

list.add("string one");

,然后使用temp变量这样做:

if(temp != list.Count){
Console.WriteLine("list was changed.");
}

然后当然如果你的列表没有排序:您可以使用以下命令获取最后一项:

list[list.Count - 1];//添加列表中的最后一项