检查列表是否已在c#中更改的最少cpu密集方法

Bla*_*lam 8 c# list

我有一个功能,那就是如果一个列表已经改变了自上次打电话叫,这将是实现这个的最佳方式?

例如:

List<A> OurList = new List<A>();
private void Update()
{
    Boolean Changed = //?    
    if(Changed) CheckList(OurList);
}
Run Code Online (Sandbox Code Playgroud)

我会假设make变量来存储旧列表并进行比较,但是如何将旧列表更新到新列表而不将其全部复制出来?(如果我进行分配,它也会更新"旧列表")

dth*_*rpe 19

使用ObservableCollection<T>而不是List,然后订阅该CollectionChanged事件.

这样,您将被告知何时更改列表而不必扫描数据以确定事后发生的事情.

  • +1:当有完美的实施可用时,为什么要自己动手?另请参见[NotifyCollectionChangedEventArgs](http://msdn.microsoft.com/en-us/library/system.collections.specialized.notifycollectionchangedeventargs_members.aspx). (3认同)

Hen*_*man 13

最有效的方法是List<>在你自己的类中包装并让所有的变异方法(Add,Remove)设置一个布尔标志.

然后,您的方法可以查看该标志并重置它.

  • 还可能存在某种事件 - 侦听器系统,当集合发生变化时通知感兴趣的各方. (3认同)

Rob*_*cus 5

如果您使用的是.NET 4.0,则可以使用ObservableCollection类.(在4.0之前,您需要引用WPF).

创建列表后,只需向CollectionChanged事件添加处理程序即可.