这是我多次遇到的模式,我已经四处寻找,但尚未就最佳方法达成共识。
public class ItemListWrapper
{
public List<Item> Contents;
}
public class Item
{
void DoStuffAndRemove() { }
}
当调用DoStuffAndRemove()时,我希望项目执行某些功能,然后从ItemListWrapper中删除。我能想到的两种方法是让ItemListWrapper实现IList(可行,但有点烦人,必须编写所有样板代码)并将委托传递给每个要调用的项目,从列表中删除(似乎非常复杂)
感谢任何帮助。感谢。
答案 0 :(得分:2)
我认为由于其他原因,必须拥有此ItemListWrapper
。让我们看看两种方法:
<强> 1。每个项目都有对其列表的引用
public class ItemListWrapper
{
public List<Item> Contents;
public void Add(Item item){ item.List = this; this.Contents.Add(item); }
}
public class Item
{
ItemListWrapper List;
void DoStuffAndRemove() { this.List.Contents.Remove(this); }
}
<强> 2。让列表控制所有内容
public class ItemListWrapper
{
public List<Item> Contents;
public void DoStuffAndRemove(Item item)
{
if(this.Contents.Contains(item))
{
item.DoStuff();
this.Contents.Remove(item);
}
}
}
public class Item
{
void DoStuff() { ... }
}
恕我直言,第二名更好,因为我理解该名单必须对其项目负责。