Как вручную построить 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))