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