Итак, у меня есть delegate
, который указывает на некоторую функцию, о которой я действительно не знаю, когда я впервые создаю объект delegate
. Объект будет установлен на некоторую функцию позже.
Затем я также хочу создать дерево выражений, которое вызывает делегат с аргументом (для этого вопроса аргумент может быть 5
). Это бит, с которым я борюсь; приведенный ниже код показывает, что я хочу, но он не компилируется.
Func<int, int> func = null;
Expression expr = Expression.Invoke(func, Expression.Constant(5));
В этом примере я мог бы сделать (это практично, так как мне нужно построить деревья выражений во время выполнения):
Func<int, int> func = null;
Expression<Func<int>> expr = () => func(5);
Это означает, что expr
станет:
() => Invoke(value(Test.Program+<>c__DisplayClass0).func, 5)
Что, по-видимому, означает, что для использования delegate
func
мне нужно создать бит value(Test.Program+<>c__DisplayClass0).func
.
Итак, как я могу создать дерево выражений, которое вызывает делегат?