| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- using System.Linq.Expressions;
- namespace BlazorEditForms.Binding;
- public static class ExpressionBuilder
- {
- public static Expression<Func<TProperty>> CreateGetter<TProperty>(MemberExpression mex)
- {
- return Expression.Lambda<Func<TProperty>>(mex);
- }
- public static Expression<Action<TProperty>> CreateSetter<TProperty>(MemberExpression mex)
- {
- var valueParameter = Expression.Parameter(typeof(TProperty), "value");
- var assign = Expression.Assign(mex, valueParameter);
- return Expression.Lambda<Action<TProperty>>(assign, valueParameter);
- }
- public static Expression ReplaceParameter(Expression originalExpression, ParameterExpression parameter, Expression replacement)
- {
- return new ParameterReplacer(parameter, replacement).Visit(originalExpression);
- }
- /// <summary>
- /// This visitor replaces a specific function parameter with an actual value given as another
- /// expression.
- /// </summary>
- public class ParameterReplacer : ExpressionVisitor
- {
- private readonly ParameterExpression _parameter;
- private readonly Expression _replacement;
- public ParameterReplacer(ParameterExpression parameter, Expression replacement)
- {
- _parameter = parameter;
- _replacement = replacement;
- }
- protected override Expression VisitParameter(ParameterExpression node)
- {
- // Replace the parameter with the provided expression
- return node == _parameter ? _replacement : base.VisitParameter(node);
- }
- }
- }
|