C# 有没有办法使子列表与主列表的内容保持同步?

C# 有没有办法使子列表与主列表的内容保持同步?,c#,list,sublist,C#,List,Sublist,我将有一个“主列表”(最好是BindingList类型)。在另一个类中,我有一个子列表,它由“主列表”的某些元素组成。类的每个实例都有不同的元素。是否有办法使每个子列表与“主列表”保持同步?您可以通过扩展列表并添加复合对象来创建所需类型的列表,并且在更新“主”列表时也同步这些复合对象 下面是我在java中的实现方法,你也可以在c#中实现,但我不记得确切的语法。当然,您可以扩展任何您喜欢的列表类型 public class MyList extends ArrayList { privat

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

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

下面是我在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;
    }

}
公共类MyList扩展了ArrayList{
私人名单其他人名单;
公共MyList(){
超级();
}
公共void setSyncList(列表){
someOtherList=列表;
}
@凌驾
公共布尔添加(对象arg0){
布尔b=super.add(arg0);
someOtherList.add(arg0);//这里您可以决定应该对同步列表执行什么操作,它可能不想添加所有元素,下面的删除操作也是如此
返回b;
}
@凌驾
公共布尔删除(对象arg0){
布尔b=super.remove(arg0);
someOtherList.remove(arg0);
返回b;
}
}

也许您需要的是ObseravleCollection集合

请参阅此以了解更多详细信息 1.
2.

你能定义synchronized吗?您能否给出一个主列表元素和子列表元素的示例,以及您希望保持同步的内容?如中所述,如果“主列表”中的对象发生更改,则包含该对象的任何子列表都将更新更改。如果它们不是值类型,则它们将更新更改。NET中的对象是通过引用传递的。你根本不应该担心这个。一个对象可以属于许多集合,只要它是相同的引用(并且应该是如果你还没有完成克隆),那么对象将是“同步的”。好的,我明白了(我来自C++,所以对我来说总是神秘的)。因此,如果我的主类中有BindingList master_list,而在另一个类(称为UserForm)的实例中,我有BindingList sub_list,那么如何填充sub_列表(以及随后删除的元素),我会将master_list[some int]传递到add函数中吗?正确。sub_list.Add(master_list[某些索引])是完全合法的。您如何合并多个子列表?除了修改arg0之外,我还会将someOtherList变成一个列表列表。然后,我将使所有这些列表实现一个用于添加和删除操作的接口,如果需要,还可以执行更多操作