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);
        }