public void Adjust(Collection.Node Node, ForEachEnum.AdjustIndexType Type) { if (Node == null || this.mDisposed) { return; } switch (Type) { case ForEachEnum.AdjustIndexType.Insert: if (this.mCurrent == null || Node != this.mCurrent.m_Next) { break; } this.mNext = Node; break; case ForEachEnum.AdjustIndexType.Remove: if (Node == this.mCurrent || Node != this.mNext) { break; } this.mNext = this.mNext.m_Next; break; } }
private void AdjustEnumeratorsHelper(Collection.Node NewOrRemovedNode, ForEachEnum.AdjustIndexType Type) { int index = checked (this.m_Iterators.Count - 1); while (index >= 0) { WeakReference iterator = (WeakReference)this.m_Iterators[index]; if (iterator.IsAlive) { ((ForEachEnum)iterator.Target)?.Adjust(NewOrRemovedNode, Type); } else { this.m_Iterators.RemoveAt(index); } checked { --index; } } }
private void AdjustEnumeratorsHelper(Node NewOrRemovedNode, ForEachEnum.AdjustIndexType Type) { for (int i = this.m_Iterators.Count - 1; i >= 0; i--) { WeakReference reference = (WeakReference)this.m_Iterators[i]; if (reference.IsAlive) { ForEachEnum target = (ForEachEnum)reference.Target; if (target != null) { target.Adjust(NewOrRemovedNode, Type); } } else { this.m_Iterators.RemoveAt(i); } } }