我有一个类型的集合:
Iesi.Collections.Generic
public ISet<ItemBinding> ItemBindings { get; set; }
ItemBinding
在哪里Domain.Model
我以这种方式初始化集合:
ItemBindings = new HashedSet<ItemBinding>();
我用成员填充集合。
当我想从这个集合中删除一个项目时,我无法删除它。
private void OnRemove(ItemBinding itemToRemove) {
ItemBindings.Remove(itemToRemove);
}
甚至与集合中的项目itemToRemove
相同。hashCode
我还尝试在集合中找到该项目,将其保存在变量中,然后将其删除:
private void OnRemove(ItemBinding itemToRemove) {
var foundItem = ItemBindings.Single( x => x.Id == itemToRemove.Id); // always if found
ItemBindings.Remove(foundItem);
}
但这不起作用。
一个可行的解决方法是:
private void OnRemove(ItemBinding itemToRemove) {
var backUpItems = new List<ItemBinding>(ItemBindings);
backUpItems.Remove(itemToRemove);
ItemBindings.Clear();
ItemBindings.AddAll(backUpItems);
}
但这是一个肮脏的解决方法。我正在尝试以优雅的方式执行此简单的删除:)。
更改类型
如果我从 IList 中的 ISet 更改类型,它可以正常工作。
public IList<ItemBinding> ItemBindings { get; set; }
ItemBindings = new List<ItemBinding>();
当我想从这个集合中删除一个项目时,它被删除了。
private void OnRemove(ItemBinding itemToRemove) {
ItemBindings.Remove(itemToRemove);
}
我无法从 ISet 中删除项目的方式中缺少什么...?
感谢您的建议,解决方案。