如何检测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
…然后我需要做另外两个动作:
第一次运行程序时,检查最近的项(本例中
Index 0
处的字符串)是否包含两个单词/字符串。如果有,那就做点什么,否则什么都不做。
但是,如果它确实包含单词/字符串,并且我们确实"做某事",则只在50秒后做一次; 即使索引0中的单词/字符串再次存在,也不要再这样做。50秒后,如果列表发生变化,并且在
Index 0
中存在此单词/字符串,则在50秒后再做一些事情。如果List没有改变,即使索引0中的单词/字符串仍然存在,也不要再这样做。if (rlines[0].Contains("צבע אדום") || rlines[0].Contains("אזעקה")) { timer3.Start(); }
只有当索引0中存在一个单词/字符串时,我才想启动timer3
。
如果50秒后没有任何变化,请不要再次启动timer3
。
只有在50秒或更晚的时间后,List发生了变化,并且索引0中再次存在一个单词/字符串,才再次启动定时器3
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];
//添加列表中的最后一项