我想知道是否有必要检查
NotifyCollectionChangedAction
NotifyCollectionChangedEventArgs
的枚举, 当订阅 CollectionChanged
事件。我偶然发现的每个例子都是这样的:
myCollection.CollectionChanged += (sender, eventArgs) =>
{
if (eventArgs.Action == NotifyCollectionChangedAction.Add)
{
foreach (SampleClass sampleObject in eventArgs.NewItems)
{
addAction(sampleObject);
}
}
else if (eventArgs.Action == NotifyCollectionChangedAction.Remove)
{
foreach (SampleClass sampleObject in eventArgs.OldItems)
{
removeAction(sampleObject);
}
}
// ...
};
是否可以忽略 NotifyCollectionChangedAction
并像这样简化代码:
myCollection.CollectionChanged += (sender, eventArgs) =>
{
eventArgs.NewItems?.OfType<SampleClass>()
.ToList()
.ForEach(addAction);
eventArgs.OldItems?.OfType<SampleClass>()
.ToList()
.ForEach(removeAction);
};
这个想法有什么缺点?有什么我遗漏的吗?
最佳答案
这取决于您要做什么,因为这些代码示例并不等效。除了 Add
和 Remove
之外,还有更多操作类型。例如,有 Replace
操作。如果我这样做:
myCollection[0] = new MyObject();
CollectionChanged
将以 Replace
操作类型触发,OldItems
将包含替换项(旧 myCollection[0])和 NewItems
将包含 new MyObject()
项。第一个代码示例将完全忽略此事件。第二个代码示例将使用 addAction
和 removeAction
处理这两个项目。如果你这样做:
myCollection.Move(0,1);
它将触发带有操作 Move
的事件,其中 OldItems
和 NewItems
都将包含移动的项目。第一个示例将再次忽略它,第二个示例将对正在移动的同一项目执行 addAction
和 removeAction
,我猜这可能会导致令人惊讶的结果。
关于c# - 是否需要在 CollectionChanged 事件中检查 NotifyCollectionChangedAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670586/