List 没有实现SyncRoot!

每个人都使用很多List。 我需要迭代这个列表,所以我使用已知的SyncRoot模式。

最近我在这篇文章中注意到应该避免使用SyncRoot以支持“嵌入式”线程安全(每个方法将锁定私有对象而不使用SyncRoot属性暴露它)。 我能理解,部分我同意这一点。

问题是List 类没有实现SyncRoot属性,即使实现了ICollection接口,它暴露了SyncRoot属性。 我说这会使代码失效

List list = new List() list.SyncRoot; 

给我以下编译器错误:

错误CS0117:’System.Collections.Generic.List’不包含’SyncRoot’的定义

…如果这是真的,我怎么能在迭代它时同步List 类型的公共属性?

它实际上是明确实现的。

 object ICollection.SyncRoot { get { if (this._syncRoot == null) { Interlocked.CompareExchange(ref this._syncRoot, new object(), null); } return this._syncRoot; } } 

这意味着您必须转换为ICollection才能使用它。