Lista no implementa SyncRoot!

Todo el mundo usa mucha lista. Necesito iterar sobre esta lista, así que uso el patrón SyncRoot conocido.

Recientemente noté en esta publicación que se debería evitar SyncRoot en favor de la seguridad de subprocesos “incrustada” (cada método se bloqueará en un objeto privado sin exponerlo con la propiedad SyncRoot). Puedo entenderlo, y parcialmente estoy de acuerdo con eso.

La pregunta es que la clase List no implementa la propiedad SyncRoot, incluso si implementa la interfaz ICollection , que expone la propiedad SyncRoot . Yo digo esto porque el código

List list = new List() list.SyncRoot; 

Dame el siguiente error de comstackción:

error CS0117: ‘System.Collections.Generic.List’ no contiene una definición para ‘SyncRoot’

… Si esto es cierto, ¿cómo podría sincronizar una propiedad pública de tipo Lista al iterar sobre ella?

En realidad se implementa explícitamente.

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

Esto significa que debes lanzar a ICollection para usarlo.