private static bool Equals()

in src/Epam.GraphQL/Helpers/ExpressionEqualityComparer.cs [544:589]


        private static bool Equals(ParameterScope? parameterScope, MemberMemberBinding x, MemberMemberBinding y) =>
            Equals(x.Member, y.Member)
            && Equals(parameterScope, x.Bindings, y.Bindings);

        private class ParameterScope
        {
            private readonly ParameterScope? _previousScope;
            private readonly Dictionary<ParameterExpression, int> _map = new();

            public ParameterScope(ParameterScope? previousScope)
            {
                _previousScope = previousScope;
            }

            public void Add(ParameterExpression key1, ParameterExpression key2, int index)
            {
                _map.Add(key1, index);
                if (key1 != key2)
                {
                    _map.Add(key2, index);
                }
            }

            public void Add(ParameterExpression key, int index)
            {
                _map.Add(key, index);
            }

            public bool TryGetValue(ParameterExpression key, out (int Depth, int Index) value)
            {
                if (_map.TryGetValue(key, out var index))
                {
                    value = (0, index);
                    return true;
                }

                if (_previousScope != null && _previousScope.TryGetValue(key, out value))
                {
                    value.Depth++;
                    return true;
                }

                value = default;
                return false;
            }
        }