protected virtual bool TryAddInternal(T item, out Exception error) { error = null; if (this.IsReadOnly) { error = new InvalidOperationException(this.ReadOnlyErrorMessage.ToString()); return(false); } if (item == null) { error = new ArgumentNullException("item", DataStrings.ErrorCannotAddNullValue); return(false); } if (this.Contains(item)) { if (!base.CopyChangesOnly) { error = new InvalidOperationException(DataStrings.ErrorValueAlreadyPresent(item.ToString())); } return(false); } ValidationError validationError = this.ValidateValue(item); if (validationError != null) { error = new DataValidationException(validationError); return(false); } base.BeginUpdate(); bool result; try { this.changed = true; if (!this.IsChangesOnlyCopy) { this.propertyValues.Add(item); } if (MultiValuedProperty <T> .Contains(this.removed, item, StringComparison.Ordinal)) { this.removed.Remove(item); } else { this.added.Add(item); } result = true; } catch (Exception) { this.errorOnUpdate = true; throw; } finally { base.EndUpdate(); } return(result); }
protected override bool TryAddInternal(T item, out Exception error) { if (null == item || base.CopyChangesOnly || this.AutoPromotionDisabled) { return(base.TryAddInternal(item, out error)); } ValidationError validationError = this.ValidateValue(item); if (validationError != null) { error = new DataValidationException(validationError); return(false); } T t = this.FindPrimary(item.Prefix); if (null == t || t == item) { item = (T)((object)item.ToPrimary()); return(base.TryAddInternal(item, out error)); } base.BeginUpdate(); bool result; try { T t2 = (T)((object)item.ToSecondary()); bool flag = base.TryAddInternal(t2, out error); if (flag && item.IsPrimaryAddress) { this.MakePrimary(t2); } result = flag; } finally { base.EndUpdate(); } return(result); }