【问题标题】:Is there a way to keep a sublist synchronized to the contents of a master list?有没有办法让子列表与主列表的内容保持同步?
【发布时间】:2011-12-29 22:37:30
【问题描述】:

我将有一个“主列表”(最好是 BindingList 类型)。在另一个类中,我有一个子列表,它由“主列表”的某些元素组成。类的每个实例都有不同的元素。有没有办法让每个子列表与“主列表”保持同步?

【问题讨论】:

  • 你能定义同步吗?您能否举一个主列表元素的示例,然后是子列表元素以及您想要保持同步的内容?
  • 如,如果“主列表”中的对象发生更改,则包含该对象的任何子列表都将更新更改
  • 如果它们不是值类型,它们将更新更改。 .NET 中的对象是通过引用传递的。你根本不应该担心这个。一个对象可以属于多个集合,只要它是同一个引用(如果你没有克隆的话应该是),那么这个对象将被“同步”
  • 好的,我明白了(我来自 C++,所以这对我来说总是很神秘)。因此,如果我的主类中有 BindingList master_list,并且在另一个类的实例中(称为 UserForm)我有 BindingList sub_list,如何填充 sub_lists(以及后来删除的元素),我会通过吗? master_list[some int] 加入 add 函数?
  • 正确。 sub_list.Add(master_list[some_index]) 是完全合法的。

标签: c# list sublist


【解决方案1】:

您可以通过扩展您的列表并添加复合对象来创建您需要的列表类型,您也可以在更新“主”列表时同步这些对象。

这是我在 java 中的做法,你可以在 c# 中做同样的事情,但我不记得确切的语法。您当然可以扩展您喜欢的任何列表类型。

public class MyList extends ArrayList {
    private List<Object> someOtherList;
    public MyList(){
        super();
    }

    public void setSyncList(List<Object> list){
        someOtherList = list;
    }

    @Override
    public boolean add(Object arg0) {
        boolean b = super.add(arg0);
        someOtherList.add(arg0); // here you can decide what action should be done to the syncList, it might not want to add all elements, same goes for the remove below
        return b;
    }

    @Override
    public boolean remove(Object arg0) {
        boolean b = super.remove(arg0);
        someOtherList.remove(arg0);
        return b;
    }

}

【讨论】:

  • 如何合并多个子列表?以及 arg0 的修改?
  • 我会将 someOtherList 变成一个列表列表。然后,如果需要,我会让所有这些列表实现一个接口,用于添加和删除操作以及更多操作
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2020-12-13
相关资源
最近更新 更多