C# 编译数值表达式

标签 c# compilation

假设我允许用户输入任意数值表达式,该表达式允许使用显式函数集和预定义变量。

解释这一点非常简单,但如果性能是一个关键因素怎么办?

我需要一种方法(在运行时)将带有表达式的字符串编译为可以使用变量上的不同值执行 20K 次的内容。

最佳答案

所以你真的想将字符串解析为(最终)一个类型化的委托(delegate)。

一个选项,然后它将字符串解析为表达式,然后您可以将其编译为 lambda。这相当复杂,但我有一些代码可以完成大部分工作 - 但可能现有的解析器已经完全完成了这项工作。

作为一个简单的表达式示例:

    var x = Expression.Parameter(typeof(double), "x");
    var y = Expression.Parameter(typeof(double), "y");
    var body = Expression.Multiply(x, y);
    var func = Expression.Lambda<Func<double, double,double>>(body, x, y).Compile();

    double z = func(123.45, 678.90);

问题出在解析代码的其余部分;-p

上周我向 Expression 解析器编写了一个 string,但它的代码比我通常在这里发布的代码要多......超过 300 行(不包括识别定制的外部函数或命名参数(当前使用匿名“?”占位符)。

但是如果(如您所说)解释很容易,那么也许可以使用类似的代码来编写可以编译的Expression

关于C# 编译数值表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380424/

相关文章:

c# - 如果绑定(bind)为空则隐藏工具提示

intellij-idea - Rust 编译模式之间的区别

c++ - C/C++ 头文件和实现文件 : How do they work?

c# - 驱动程序连接到项目

c# - IEnumerable 集合中元素的序号位置 (Linq to XMl )

c# - WCF+ 计时器。不好的做法?

c++ - 编辑全局变量时减少重新编译

sql - 选项(重新编译)总是更快;为什么?

c++ - std::sort 和 std::unique 结构问题

c# - 如何使用 C# 在 RSS 提要的 channel 元素内插入元素 <item>..</item>?