Кто-то может объяснить экранирование строки в JavaScript

Вы можете использовать Expression.AndAlso / OrElse для объединения логических выражений, но вы должны убедиться, что значения параметра одинаковы.

У меня были проблемы с EF и PredicateBuilder , поэтому я сделал свой собственный, не прибегая к Invoke, чтобы я мог использовать вот так:

var filterC = filterA.And(filterb);

Исходный код для моего PredicateBuilder:

public static class PredicateBuilder {

    public static Expression> And(this Expression> a, Expression> b) {    

        ParameterExpression p = a.Parameters[0];

        SubstExpressionVisitor visitor = new SubstExpressionVisitor();
        visitor.subst[b.Parameters[0]] = p;

        Expression body = Expression.AndAlso(a.Body, visitor.Visit(b.Body));
        return Expression.Lambda>(body, p);
    }

    public static Expression> Or(this Expression> a, Expression> b) {    

        ParameterExpression p = a.Parameters[0];

        SubstExpressionVisitor visitor = new SubstExpressionVisitor();
        visitor.subst[b.Parameters[0]] = p;

        Expression body = Expression.OrElse(a.Body, visitor.Visit(b.Body));
        return Expression.Lambda>(body, p);
    }   
}

И класс утилиты для замены параметры в лямбда:

internal class SubstExpressionVisitor : System.Linq.Expressions.ExpressionVisitor {
        public Dictionary subst = new Dictionary();

        protected override Expression VisitParameter(ParameterExpression node) {
            Expression newValue;
            if (subst.TryGetValue(node, out newValue)) {
                return newValue;
            }
            return node;
        }
    }

0
задан Muhammad Usama 18 January 2019 в 14:41
поделиться

1 ответ

Регулярное выражение заменяет все совпадения на обратную косую черту и соответствующую подстроку. Он соответствует любым отдельным символам из набора между [ и ]. То есть:

  • - simple dash
  • \\ одиночная обратная косая черта (с предшествующей другой обратной косой чертой, потому что это сервер как escape-символ)
  • / косая черта
  • \\ снова одиночная обратная косая черта (здесь она устарела)
  • ^, $, *, +, ?, ., [ 1112], ), |, [ одиночные символы
  • \] закрывающей скобке предшествует escape-символ, в противном случае будет закрыт набор символов для соответствия
  • [1117 ], } одиночные символы

Строка замены \\[1119]amp; просто говорит:

  • \\ add одиночная обратная косая черта
  • [1121]amp; add вся подстрока соответствует выражению
0
ответ дан Roman Hocke 18 January 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: