示例#1
0
        internal bool TryAdd(MemberInfo member, object xValue, object yValue)
        {
            Debug.Assert(!this.disposed, "this.disposed");
            lock (this.gate)
            {
                if (this.KeyedSubBuilders.ContainsKey(member))
                {
                    this.Add(member, xValue, yValue);
                    return(true);
                }

                if (!this.KeyedDiffs.TryGetValue(member, out var old))
                {
                    this.Add(member, xValue, yValue);
                    return(true);
                }

                if (old.Diffs.Count > 0)
                {
                    this.Add(member, xValue, yValue);
                    return(true);
                }

                if (EqualBy.TryGetValueEquals(xValue, old.X, this.settings, out var xEqual) && xEqual &&
                    EqualBy.TryGetValueEquals(yValue, old.Y, this.settings, out var yEqual) && yEqual)
                {
                    return(false);
                }

                this.Add(member, xValue, yValue);
                return(true);
            }
        }
示例#2
0
 public bool TryGetValueEquals(TSource x, TSource y, MemberSettings settings, out bool equal, out TValue xv, out TValue yv)
 {
     xv = this.GetValue(x);
     yv = this.GetValue(y);
     return(EqualBy.TryGetValueEquals(xv, yv, settings, out equal));
 }