Я пытаюсь узнать, как использовать схему Accord для работы с деревьями решений в C#. Я следую этому руководству: LINK. Пока я понимаю, как это работает, но я застрял после изучения и компиляции дерева. Я использую тот же код, как в учебнике, так что я нахожусь здесь:Демпинговая функция в динамическую сборку
// Convert to an expression tree
var expression = tree.ToExpression();
// Compiles the expression to IL
var func = expression.Compile();
Теперь я хотел бы знать, как получить доступ к этой функции (она также в учебнике).
public static int Compute(double[] input)
Эта функция как-то сгенерирована. В учебнике также есть ссылка о том, как сбрасывать функцию в сборку dynamicall, но я не уверен, как ее использовать. Вот код:
var da = AppDomain.CurrentDomain.DefineDynamicAssembly(
new AssemblyName("dyn"), // call it whatever you want
AssemblyBuilderAccess.Save);
var dm = da.DefineDynamicModule("dyn_mod", "dyn.dll");
var dt = dm.DefineType("dyn_type");
var method = dt.DefineMethod(
"Foo",
MethodAttributes.Public | MethodAttributes.Static);
lambda.CompileToMethod(method);
dt.CreateType();
da.Save("dyn.dll");
Может кто-нибудь помочь мне в этом? Спасибо.
EDIT: Как передать тестовые данные и получить результат из полученного дерева? Это мой вопрос.
Я не совсем уверен, что вы просите. 'Compile' возвращает делегат, который вы можете вызвать через нечто вроде' var result = func (arg) '(его непонятно, какой тип делегата). Я думаю, что ссылка на создание динамической сборки пытается объяснить, как смотреть на сгенерированный код. Вероятно, это не то, что пользователь обычно делал бы, если вы не пытаетесь понять сгенерированный код. –