小编典典

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

c#

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

  1. 通过递归下降
  2. 调车场算法
  3. 波兰语反符号

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


阅读 252

收藏
2020-05-19

共1个答案

小编典典

根据Thomas的回答,实际上可以直接从C#访问(不建议使用的)JScript库,这意味着您可以使用等效于JScript的eval功能。

using Microsoft.JScript;        // needs a reference to Microsoft.JScript.dll
using Microsoft.JScript.Vsa;    // needs a reference to Microsoft.Vsa.dll

// ...

string expr = "7 + (5 * 4)";
Console.WriteLine(JScriptEval(expr));    // displays 27

// ...

public static double JScriptEval(string expr)
{
    // error checking etc removed for brevity
    return double.Parse(Eval.JScriptEvaluate(expr, _engine).ToString());
}

private static readonly VsaEngine _engine = VsaEngine.CreateEngine();
2020-05-19