【发布时间】:2010-03-19 21:32:57
【问题描述】:
我有一个收藏
private ObservableCollection<Contact> _contacts;
在我的类的构造函数中创建它
_contacts = new ObservableCollection<Contact>();
我有方法可以从我的收藏中添加和删除项目。我想跟踪我的集合中实现 IPropertyChanged 接口的实体的更改,因此我订阅了他们的 PropertyChanged 事件。
public void AddContact(Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged += new PropertyChangedEventHandler(Contact_PropertyChanged);
_contacts.Add(contact);
}
public void AddContact(int index, Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged += new PropertyChangedEventHandler(Contact_PropertyChanged);
_contacts.Insert(index, contact);
}
当我从集合中删除一个实体时,我取消了对 PropertyChanged 事件的订阅。有人告诉我这是为了让实体被垃圾收集,而不是造成内存问题。
public void RemoveContact(Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged -= Contact_PropertyChanged;
_contacts.Remove(contact);
}
所以,我希望这一切都好。现在,我需要用我的一种方法清除集合。我的第一个想法是打电话给_contacts.Clear()。然后我想知道这是否会释放这些事件订阅?我需要创建自己的清晰方法吗?像这样的:
public void ClearContacts()
{
foreach(Contact contact in _contacts)
{
this.RemoveContact(contact);
}
}
我希望这里的 .NET C# 专家之一可以为我解决这个问题或告诉我我做错了什么。
【问题讨论】:
标签: c# collections