从父列表中删除对象的最佳做法?

时间:2013-03-22 16:57:16

标签: c# .net collections

这是我多次遇到的模式,我已经四处寻找,但尚未就最佳方法达成共识。

public class ItemListWrapper
{
    public List<Item> Contents;
}

public class Item
{
   void DoStuffAndRemove() { }
}

当调用DoStuffAndRemove()时,我希望项目执行某些功能,然后从ItemListWrapper中删除。我能想到的两种方法是让ItemListWrapper实现IList(可行,但有点烦人,必须编写所有样板代码)并将委托传递给每个要调用的项目,从列表中删除(似乎非常复杂)

感谢任何帮助。感谢。

1 个答案:

答案 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() { ... }
}

恕我直言,第二名更好,因为我理解该名单必须对其项目负责。