Im пытается построить оценщик выражения с Linq выражения. Я пытаюсь сделать это так, чтобы все аргументы функции ленивы оценены, но не могут получить .Ленивая оценка выражений linq
Я пишу здесь в psuedo, но реальная вещь - выражения linq.
Пример выражения:
Func1(Func2(10) + 1, Func3(10))
Update
Expression.Call(Func1,
Expression.Add(
Expression.Call(Func2, Expression.Constant(10)),
Expression.Constant(1))
Expression.Call(Func3, Expression.Constant(10))
)
Я хочу, чтобы аргументы FUNC1 быть оценены в Invoke времени , который я хочу, чтобы аргументы лениться оценены. Это возможно при обертке аргументов аргументов внутри выражения лямбда, но если я это сделаю, двоичное выражение Func2 (10) + 1 завершится неудачно, потому что нельзя добавить лямбда к постоянному выражению.
Реальная функция код будет выглядеть следующим образом:
int Func1(Func<int> arg1, Func<int> arg2)
{
}
arg1 при запуске будет оценивать "func2 (10) + 1"
арг2 при запуске будет оценивать "FUNC3 (10)"
Поэтому я могу выбрать, хочу ли я анализировать аргумент или нет, чтобы получить ленивый эффект.
Можно ли выполнить?
Я думаю, что реальный код дерева выражений будет улучшением для нас над вашим псевдокодом. –
@Kirk: Хорошо, я отредактирую свое сообщение. – Marcus
Благодарим за редактирование. Но я смущен, почему вы думаете, что это уже не * лениво оценивается? Выражение 'Func2 (10) + 1' не будет оцениваться до тех пор, пока не вызывается' Func1'. Что мне не хватает? –