public override Element this[int index] { get { RWLock.EnterUpgradeableReadLock(); try { var elem = Inner[index]; if (elem != null && elem.Stub && elem.Owner != null) { RWLock.EnterWriteLock(); try { elem = Inner[index] = elem.Owner.OnStubRequest(elem.ID); } catch (Exception err) { throw new DestubException(this, index, err); } finally { RWLock.ExitWriteLock(); } } return(elem); } finally { RWLock.ExitUpgradeableReadLock(); } } set { base[index] = value; } }