Как вручную построить Expression, которая всегда будет возвращать true?

Я пытался создать Expression, но не смог.

Я хочу построить что-то вроде Expression<Func<typeof(type), bool>> expression = _ => true;

Моя попытка:

private static Expression GetTrueExpression(Type type)
{
    LabelTarget returnTarget = Expression.Label(typeof(bool));
    ParameterExpression parameter = Expression.Parameter(type, "x");

    var resultExpression = 
      Expression.Return(returnTarget, Expression.Constant(true), typeof(bool));

    var delegateType = typeof(Func<,>).MakeGenericType(type, typeof(bool));

    return Expression.Lambda(delegateType, resultExpression, parameter); ;
}

Использование:

var predicate = Expression.Lambda(GetTrueExpression(typeof(bool))).Compile();

Но я получаю ошибку: Cannot jump to undefined label ''

2 ответа

Решение

Так просто:

private static Expression GetTrueExpression(Type type)
{
    return Expression.Lambda(Expression.Constant(true), Expression.Parameter(type, "_"));
}

Существует хороший инструмент, который может помочь вам построить деревья выражений http://tryroslyn.azurewebsites.net/.

Я добавил linq к примеру с @Ivan'ом GetTrueExpression

Мне пришлось столкнуться с той же проблемой и получить этот код. Вроде бы чисто и просто.

Expression.IsTrue(Expression.Constant(true))
Другие вопросы по тегам