Примечание. Оценка математических выражений не является предметом этого вопроса. Я хочу скомпилировать и выполнить новый код во время выполнения в .NET. Это сказано...
Я хотел бы разрешить пользователю вводить любое текстовое поле, например следующее:
x = x / 2 * 0.07914
x = x^2 / 5
И примените это уравнение к входящим точкам данных. Точки входящих данных представлены x, и каждая точка данных обрабатывается заданным пользователем уравнением. Я делал это много лет назад, но мне не понравилось решение, потому что для каждого вычисления требовался разбор текста уравнения:
float ApplyEquation (string equation, float dataPoint)
{
// parse the equation string and figure out how to do the math
// lots of messy code here...
}
Когда вы обрабатываете лодку точек данных, это приводит к довольно небольшим накладным расходам. Я хотел бы иметь возможность перевести уравнение в функцию "на лету", так что его нужно разобрать только один раз. Он будет выглядеть примерно так:
FunctionPointer foo = ConvertEquationToCode(equation);
....
x = foo(x); // I could then apply the equation to my incoming data like this
Функция ConvertEquationToCode будет анализировать уравнение и возвращать указатель на функцию, которая применяет соответствующую математику.
В основном приложение будет писать новый код во время выполнения. Возможно ли это с .NET?