gpt4 book ai didi

c# - 列表 : Moving from immutable to changeable structure

转载 作者:太空狗 更新时间:2023-10-30 01:09:25 26 4
gpt4 key购买 nike

我目前正在大量使用一些列表,并且我通过 foreach 非常频繁地循环遍历这些列表。
最初 List 在启动后是不可变的。现在我需要在运行时仅从一个线程(一种监听器)修改列表。我需要从列表中删除对象 A 并添加到对象 B 的列表中。A 和 B 是同一类的实例。
不幸的是没有同步列表。在这种情况下你会建议我做什么?在我的例子中,速度比同步更重要,因此我目前正在使用列表的副本进行添加/删除,以避免枚举器失败。
你有任何其他推荐的方法来处理这个问题吗?

class X {
List<T> Related {get; set;}
}

我在几个地方和不同的线程中使用

 foreach var x in X.Related

现在我基本上需要在另一个线程中执行

a.Related.Remove(t);
b.Related.Add(t);

为了避免潜在的异常,我目前正在这样做:

List<T> aNew=new List<T> (a.Related);
aNew.Remove(t);
a.Related=aNew;
List<T>bNew=new List<T>(b.Related){t};
b.Related=bNew;

这样避免异常是否正确?

最佳答案

来自此 MSDN 帖子:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

“...确保线程安全的唯一方法是在整个枚举期间锁定集合。”

关于c# - 列表<T> : Moving from immutable to changeable structure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com