У меня есть выражение, которое принимает выражение в качестве одного из своих параметров:
Я использую ExpressionVisitor для получения значений констант см. Этот пост SO .
но если член относится к типу memberAccess, я хочу иметь возможность оценить, каково будет действительное значение этого параметра. В этом примере ($obj.Name).Length
.
пример хочет проверить, больше ли int (первое значение), чем второе значение (в данном случае выражение). Если это константа, я знаю, как получить их значение, но я не могу понять, как оценить выражение на лету.
Я передал весь объект и все выражение в ExpressionVisitor, чтобы они были доступны для использования при необходимости.
internal class ValueExtractor : ExpressionVisitor
{
private readonly object _item;
private readonly MethodCallExpression _wholeExpression;
public List<object> Arguments { get; }
protected override Expression VisitMember(MemberExpression node)
{
if (memberType == ExpressionType.MemberAccess)
{
var exp = Expression.Lambda<Func<int>>(node, false, NotSureAboutThis);
exp.Compile().Invoke(NotSureWhichPropGoesHere);
}
}
}
Значение узла в VisitMember:
У меня есть доступ к T и TMember. где T - главный объект, все это называется (имеет свойство Age), а TMember - int в этом случае (Age).
Я не уверен, что приведенный выше пример идет в правильном направлении, если это не так, я не уверен, как это закончить.