评估数学表达式的最佳和最短方法

问题描述 投票:17回答:8

例如,有很多算法可以计算表达式:

  1. By Recursive Descent
  2. Shunting-yard algorithm
  3. Reverse Polish notation

是否可以使用C#.net反射或其他现代.net技术评估任何数学表达式?

c# .net expression evaluation
8个回答
19
投票

除了托马斯的答案,实际上实际上可以直接从C#访问(不建议使用的)JScript库,这意味着您可以使用等效于JScript的eval函数。


13
投票

当然有可能。 CodeSnippetCompileUnit类基本上是这样做的。我给您写了一些用法示例代码。您需要包括以下名称空间:


3
投票

尽管使用编译器服务是一种简单而有效的解决方案,但是如果用户输入该表达式,则会引起严重的安全性问题,因为它实际上可以执行anything


3
投票

对我来说,Vici.Parser表现得非常好:check it out here,这是我到目前为止发现的最灵活的表达式解析器。


3
投票

ncalc是最好的。您也可以在块金的codeplex中找到它。NCalc是.NET中的数学表达式评估器。 NCalc可以解析任何表达式并评估结果,包括静态或动态参数以及自定义函数。


1
投票

我认为这是最好的方法。 Petar Repac's answer很棒。使用DataColumn对象的'expression'参数可以轻松而轻松地解决以下主题:


0
投票

您可以使用Math-Expression-Evaluator库,该库实现了我创作的Shunting Yard算法。它支持简单的表达式,例如2.5+5.917.89-2.47+7.165/2/2+1.5*3+4.58,带括号(((9-6/2)*2-4)/2-6-1)/(2+24/(2+4))的表达式和带变量的表达式:


0
投票

使用新的Roslyn API动态编译代码,并将程序集加载到.net核心项目中;

© www.soinside.com 2019 - 2024. All rights reserved.