Теперь я собираюсь скомпилировать дерево выражений в делегат для динамической генерации кода, но у меня есть проблема. Я должен вызвать метод в дереве выражений, который является точно делегатом дерева выражений, который еще не был динамически скомпилирован. Что мне делать?
Я хочу сгенерировать следующий код из дерева выражений:
int i = 0;
Action ac = null;
ac = () =>
{
//if (i-- > 0) condition
ac();
};
Следующий код не работает и запросит переменную null
static Action ac = Build();
static Action Build()
{
return Expression.Lambda<Action>(
Expression.Call(
Expression.Constant(ac), //throw ac is null
typeof(Action).GetType().GetMethod("Invoke")
)
).Compile();
}