Пример #1
0
        private bool EqualsMember(MemberExpression x, MemberExpression y)
        {
            // If any of the two nodes represents an access to a captured variable,
            // we want to compare its value, not its identity. (`EvaluateCaptures` is
            // a no-op in all other cases, so it is safe to apply "just in case".)
            var rx = x.Apply(EvaluateCaptures.Rewriter);
            var ry = y.Apply(EvaluateCaptures.Rewriter);

            if (rx == x && ry == y)
            {
                return(x.Member == y.Member && this.Equals(x.Expression, y.Expression));
            }
            else
            {
                // Rewriting occurred, we might no longer have two `MemberExpression`s:
                return(this.Equals(rx, ry));
            }
        }