我是C#和OOP的新手,只是一个关于NotifyCollectionChangedEventArgs的问题。我不明白为什么它有NewItems和OldItems而不是NewItemOldItem
例如,我们将ObservableCollection用作:

ObservableCollection<Person> people = new ObservableCollection<Person>()
// Wire up the CollectionChanged event.
people.CollectionChanged += people_CollectionChanged;

static void people_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
   if (e.Action == NotifyCollectionChangedAction.Add)
   {
     foreach (Person p in e.NewItems)
     {
        Console.WriteLine(p.ToString());
     }
   }

}


因此,每次我们在集合中添加新的Person为:

people.Add(new Person("John", "Smith", 32));


CollectionChanged触发people_CollectionChanged,所以e.NewItems只包含一个人(我刚刚添加的那个人),因此假设e.NewItems可以有多个项目,因为它总是只能有一个项目,这有什么意义呢?

最佳答案

您要订阅的事件实际上是由INotifyCollectionChanged接口定义的,并由ObservableCollection实现的。

虽然ObservableCollection没有一次添加多个项目的方法,但它确实有一个ClearItems方法,该方法可以一次删除多个项目。这是我想到复数名称的原因之一,因为它们可以包含多个项目。

而且,由于它是一个接口,因此可以由其他类实现,这些类确实实现了诸如AddRangeRemoveWhere等方法,这些方法将再次引发具有多个项目的事件。

关于c# - 为什么NotifyCollectionChangedEventArgs的NewItems和OldItems为复数形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56354106/

10-15 10:37