首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于IList的SyncRoot

用于IList的SyncRoot
EN

Stack Overflow用户
提问于 2009-12-29 14:49:47
回答 3查看 2.6K关注 0票数 1

我的代码是使用ArrayList存储集合元素的旧代码。我使用locking purpose before delete the objectm_objects.SyncRoot

代码语言:javascript
复制
        lock(m_objects.SyncRoot) 
        {
            m_objects.Remove(obj);

        }

现在的问题是,我现在想将m_objects的类型从ArrayList更改为List<T>,但我在上面的代码中遇到了问题。什么相当于List<T>SyncRoot

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-29 15:02:23

我想这可能就是你要找的

代码语言:javascript
复制
List<string> list = new List<string>();
lock (((IList)list).SyncRoot)
{
}

可在C# Generics Recipes—Replacing the ArrayList with Its Generic Counterpart找到

票数 6
EN

Stack Overflow用户

发布于 2009-12-29 17:12:50

据我所知,SyncRoot只是一个用于锁定的对象。它只是为了让你省去创建要锁定的对象的麻烦。所以它必须是相同的

代码语言:javascript
复制
Object m_objectsLock = new Object();

lock(m_objectsLock) 
{
    m_objects.Remove(obj);

}

您必须确保在使用SyncRoot的任何地方都使用m_objectsLock。

票数 1
EN

Stack Overflow用户

发布于 2009-12-29 17:07:06

据我所知,SyncRoot的概念已经过时了,而且用得也不多。大多数人转而使用lock(){}块。

代码语言:javascript
复制
public class SomeClass {
  private readonly object listLock = new object();
  private readonly List<string> yourList = new List<string>();

  public void DeleteItem(string item) {
    lock (listLock) {
      yourList.Remove(item)
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1973272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档