我有两个ObservableCollections,一个包含当前员工列表,另一个包含新员工。如果新员工包含的员工不在旧列表中,我想将其添加到旧列表中。
如果新列表中的旧列表中不包含员工,我想将其从旧列表中删除。 (我希望这是有道理的)。
这是我尝试过的;
foreach (var employee in _currentUsers.ToList())
{
if (!newUsers.Contains(employee))
{
Dispatcher.Invoke(() =>
{
_currentUsers.Remove(employee);
CurrentUsageDataGrid.Items.Refresh();
});
}
}
foreach (var employee in newUsers)
{
if (!_currentUsers.Contains(employee))
{
Dispatcher.Invoke(() =>
{
_currentUsers.Add(employee);
CurrentUsageDataGrid.Items.Refresh();
});
}
}
即使我知道列表没有改变,Dispatcher.Invoke()
仍在解雇,但这不起作用。我是否误解了Contains
的运作方式和/或是否有“更好”的方式来执行这样的检查?
答案 0 :(得分:1)
您的员工类是否实现IEquatable<T>
接口,包含ObservableCollection
的方法将在该接口中使用Equal
来比较对象。
否则,您可能需要使用Linq来检查现有员工,而不是使用Contains
有关MSDN的更多参考,https://msdn.microsoft.com/en-us/library/ms132407(v=vs.100).aspx
答案 1 :(得分:1)
如上所述,您需要实现/覆盖Equal方法进行比较。当您对2个类对象执行“包含”检查时,它会检查2个对象是否相等(而不是它们的属性是否相同)。您可以使用id执行相等操作,也可以计算哈希值并进行比较。