【发布时间】:2021-04-21 12:23:17
【问题描述】:
我遇到了ObservableCollection 的问题。我有两个ObservableCollection。一个是旧的,另一个是新的。我想检查旧项目中是否有新项目中没有的项目并将其删除(从旧项目中)。
public class Class1
{
private ObservableCollection<String> m_Files = new ObservableCollection<String>();
public void update()
{
ObservableCollection<String> tmp_Files = new ObservableCollection<String>();
tmp_Files.Add("Foo");
tmp_Files.Add("Bar");
this.m_Files.Add("Boing");
this.m_Files.Add("Foo");
this.m_Files.Add("Bar");
this.m_Files = RemoveObsoleteFiles(this.m_Files, tmp_Files);
}
private ObservableCollection<String> RemoveObsoleteFiles(ObservableCollection<String> files_OLD, ObservableCollection<String> files_NEW)
{
ObservableCollection<String> result = files_OLD;
foreach (String item in files_OLD)
{
if (!files_NEW.Contains(item))
{
result.Remove(item);
}
}
return result;
}
}
当调用RemoveObsoleteFiles() 方法时出现错误:
System.InvalidOperationException: '集合已修改;枚举操作可能无法执行。'
单步执行代码我注意到result 更改时tmp_Files 也会更改。
这是为什么呢?如何避免?
【问题讨论】:
-
你打错字了,应该是
files_NEW.Remove(item)。