Как мне позвонить через делегат, сгенерированный деревом выражений? - PullRequest
0 голосов
/ 15 января 2019

Теперь я собираюсь скомпилировать дерево выражений в делегат для динамической генерации кода, но у меня есть проблема. Я должен вызвать метод в дереве выражений, который является точно делегатом дерева выражений, который еще не был динамически скомпилирован. Что мне делать?

Я хочу сгенерировать следующий код из дерева выражений:

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();
}
...