public void Freeze() { if (IsFrozen) { return; } IsFrozen = true; Begin.Freeze(); int i = 0; foreach (ShapeNode node in this) { node.Tag = i++; node.Freeze(); } End.Freeze(); _annotations.Freeze(); _hashCode = 23; _hashCode = _hashCode * 31 + Count; _hashCode = _hashCode * 31 + _annotations.GetFrozenHashCode(); }