private void DetachFixin(AbstractFixin fixin, string fixinName) { if (fixin == null && fixinName == null) { throw new ArgumentNullException( String.Format( "When detaching a fixin from form '{0}', both parameters " + "('fixin' and 'fixinName') can't be null.", Anonymous ? (object)this : Name)); } if (fixin == null) { fixin = UpdateFixins.ContainsKey(fixinName) ? UpdateFixins[fixinName] : RenderFixins.ContainsKey(fixinName) ? RenderFixins[fixinName] : null; if (fixin == null) { return; } } else if (fixinName == null) { fixinName = fixin.Name; } var type = fixin.FixinType; // There's probably a simpler if statement for this... if (type == FixinType.Update && _midUpdateFixins || type == FixinType.Render && _midRenderFixins || type == (FixinType.Update | FixinType.Render) && (_midRenderFixins || _midUpdateFixins)) { _fixinsToRemove.Add(fixinName); } else { switch (type) { case FixinType.Update: UpdateFixins.Remove(fixinName); break; case FixinType.Render: RenderFixins.Remove(fixinName); break; case FixinType.Update | FixinType.Render: UpdateFixins.Remove(fixinName); RenderFixins.Remove(fixinName); break; } fixin.Kill(false); } }