C# 根据其他列表发生的更新更新列表

C# 根据其他列表发生的更新更新列表,c#,collections,C#,Collections,我有listA,listBlistA是listB的子集。例如,删除1个元素,将2个元素添加到listB。然后,如果listA包含从listB中删除的元素,请将其从listA中删除。另外,listA应该添加新添加的元素 目前我正在使用foreach{if(list.contains)}两次。一次添加,一次删除。这将是O(2n)的形式,这是可以的 但是,有没有最好的方法来实现这一点,主要是用LINQ中的O(n)/其他方法 更清楚地说: 实际上我有一个自定义类的列表。 在上面的问题中,我正在从中形成l

我有
listA
listB
listA
listB
的子集。例如,删除1个元素,将2个元素添加到
listB
。然后,如果
listA
包含从listB中删除的元素,请将其从
listA
中删除。另外,
listA
应该添加新添加的元素

目前我正在使用
foreach{if(list.contains)}
两次。一次添加,一次删除。这将是O(2n)的形式,这是可以的

但是,有没有最好的方法来实现这一点,主要是用LINQ中的O(n)/其他方法

更清楚地说:
实际上我有一个自定义类的列表。
在上面的问题中,我正在从中形成
listA
(使用该问题的一个字段)
ListB
只是我从web服务获得的字符串列表。 代码:


然后我会相应地更新
列表。我的主要问题是不用两个
foreach
循环,我能做得更好吗?

你能用事件/委托代替foreach吗?阅读讨论

是否可以使用事件/委托而不是foreach?阅读讨论

这可能更有效(尽管这取决于):

请注意,如果
T
是自定义类,则需要实现自定义
IEqualityComparer

编辑:所以这只是同步两个列表。也许我误解了这个问题,但你不能简单地:

listA = new List<T>(listB);
listA=新列表(listB);

这可能更有效(尽管这取决于):

请注意,如果
T
是自定义类,则需要实现自定义
IEqualityComparer

编辑:所以这只是同步两个列表。也许我误解了这个问题,但你不能简单地:

listA = new List<T>(listB);
listA=新列表(listB);

您应该能够使这些列表可见。更新一个列表时,触发CollectionChanged事件,并添加一些代码来更新另一个列表。你应该能够做到这两个方面。请参见可观察集合:


此外,可观察集合允许您检测在集合上发生的事件类型。(即添加、删除、替换等)这将有助于您使用相同信息更新其他列表

您应该能够使这些列表可见。更新一个列表时,触发CollectionChanged事件,并添加一些代码来更新另一个列表。你应该能够做到这两个方面。请参见可观察集合:


此外,可观察集合允许您检测在集合上发生的事件类型。(即添加、删除、替换等)这将有助于您使用相同信息更新其他列表

你能发布一个真实的代码片段吗?用可能的代码片段更新了问题吗?你能发布一个真实的代码片段吗?用可能的代码更新了问题snippet@AYK-不,我不能使用它们,因为我从服务中获得了第二个列表。@AYK不,我不能使用它们,因为我从服务中获得了第二个列表。我正在做类似的事情你的建议。但是我喜欢你的方式。正如您从更新的问题中看到的,我不能使用listA=新列表(listB);不使用两块foreach,我能做得更好吗?有什么帮助吗?我正在做一些类似于你建议的事情。但是我喜欢你做的方式。正如您从更新的问题中看到的,我不能使用listA=新列表(listB);不使用两块foreach,我能做得更好吗?有什么帮助吗?我正在从服务处获得第二个列表。为了更清楚,我更新了我的问题。谢谢你的输入。我正在从服务处获得第二个列表。为了更清楚,我更新了我的问题。谢谢你的输入
listA = new List<T>(listB);