int _GetPrimitiveHashCode(object obj)
        {
            switch (obj)
            {
            case null:
                return(0);

            case IEnumerable <object> e:
                return(HashCodeEx.SequenceCombine(e.Select(_GetPrimitiveHashCode)));

            case string s:
                return(StringComparer.Ordinal.GetHashCode(s));

            case Expression expr:
                return(Visit(expr));

            default:
                return(obj.GetHashCode());
            }
        }
 protected override int VisitNewArray(NewArrayExpression na) => HashCodeEx.SequenceCombine(na.Expressions.Select(Visit));