C# 需要.Net的公式解释器吗
我正在寻找一个可以在C#应用程序中使用的公式解释器。它需要能够解释如下字符串:C# 需要.Net的公式解释器吗,c#,.net,expression,interpreter,formula,C#,.net,Expression,Interpreter,Formula,我正在寻找一个可以在C#应用程序中使用的公式解释器。它需要能够解释如下字符串: max(1+2, 4) * x 我发现它几乎满足了我的需要,但它不允许有多个参数的函数。我可能会将该功能添加到它中,但我只是想知道这样的功能是否已经存在 谢谢我过去用过的一对,没有问题: 您实际上可以通过解析和替换某些功能性关键字(如max),然后将公式作为C#类和方法来构建一个非常有效的解释器。因此,实际上您将解析和包装公式,并允许C#编译器解释和执行它 因此,取max(1+2,4)*x的样本公式将变成:
max(1+2, 4) * x
我发现它几乎满足了我的需要,但它不允许有多个参数的函数。我可能会将该功能添加到它中,但我只是想知道这样的功能是否已经存在
谢谢我过去用过的一对,没有问题:
max
),然后将公式作为C#类和方法来构建一个非常有效的解释器。因此,实际上您将解析和包装公式,并允许C#编译器解释和执行它
因此,取max(1+2,4)*x的样本公式将变成:
public class MyFormula
{
public double calc(double x)
{
return Math.Max(1+2, 4) * x;
}
}
您可以动态编译,然后根据链接的文章执行。当然,您仍然需要解析并传递x值。很久以前,在一个项目中,我必须使用公式创建一些预订,并且我使用了VsaEngine。要使用此引擎,您需要添加对Microsoft.JScript
的引用。下面是一个例子:
使用代码非常简单,只需替换公式参数,如:
string formula = "x+y";
formula= formula.Replace("x","100").Replace("y","200");
string result = CalculateFormula(formula);
这里是核心方法CalculateFormula:
public string CalculateFormula(string evaluationString)
{
VsaEngine en = VsaEngine.CreateEngine();
Object result = Eval.JScriptEvaluate(evaluationString, en);
return result.ToString();
}
有了这个,您可以创建自定义公式解释器引擎。可能的重复:另一个可能的重复:这些问题相对来说比较老-Corbins答案已经链接到了两个项目,这两个问题中都没有提到,所以我说保持问题的开放性。这个问题已经做得很死了。在过去的10年里,没有革命性的发展。如果不满足某些安全预防措施,这似乎很危险。@Ozzah:这不像SQL注入。首先,你会限制输入的数量,然后你会解析诸如max、sin、cos等数学术语。任何不符合犹太规范的东西都会因为语法错误而失败。