Примечание. Оценка математических выражений не является целью данного вопроса. Я хочу скомпилировать и выполнить новый код во время выполнения в .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?