评估存储在字符串中的算术表达式(C#)就像我得到一个字符串:stringmyExpr="4*(80+(5/2))+2";我想计算算术表达式的结果。在使用Javascript、PHP等时,您可以使用Eval来完成此技巧,这在C#中似乎不是一个选项。我想可以编写一个代码将其拆分为无数个简单的表达式,计算它们并将它们加在一起,但这会花费相当多的时间,而且我可能会遇到很多麻烦。所以......我的问题是,有没有一种“简单”的方法可以做到这一点?您可以引用一个javascript库,然后执行以下操作:varengine=VsaEngine.CreateEngine();Eval.JScriptEvaluate(mySum,引擎);编辑;该库是Microsoft.JScript,您可以调用JScript.NETeval函数。任何.NET语言都可以调用任何其他语言。你看过http://ncalc.codeplex.com吗?它具有可扩展性、速度快(例如,拥有自己的缓存),并使您能够通过处理EvaluateFunction/EvaluateParameter事件在运行时提供自定义函数和变量。它可以解析的示例表达式:Expressione=newExpression("Round(Pow(Pi,2)+Pow([Pi2],2)+X,2)");e.Parameters["Pi2"]=newExpression("Pi*Pi");e.Parameters["X"]=10;e.EvaluateParameter+=delegate(stringname,ParameterArgsargs){if(name=="Pi")args.Result=3.14;};Debug.Assert(117.07==e.Evaluate());它还可以本地处理unicode和许多数据类型。如果您想更改语法,它会附带一个antler文件。还有一个fork支持MEF加载新特性。它还支持逻辑运算符、日期/时间字符串和if语句。请参阅此答案:C#数学计算器我使用NCalc取得了巨大成功。它非常灵活,允许在公式中使用变量。您可以轻松评估您在问题中列出的公式:stringmyExpr="4*(80+(5/2))+2";十进制结果=Convert.ToDecimal(newExpression(myExpr).Evaluate());您需要实现一个表达式计算器。有背景还算简单,但不“简单”。解释环境中的Eval实际上是在字符串上重新运行语言解析器;您需要在C#代码中为您关心的位模拟该操作。搜索“表达式求值器”和“递归下降解析器”以开始使用。如果您有BjarneStroustrup的TheC++ProgrammingLanguage,那么在第6章中,他会逐步(用C++)解释如何按照ChrisTavares的建议进行操作。如果您不熟悉该程序,它很简单但有点令人兴奋。我需要为我的本科项目做一些类似的事情,我发现这个C#教程和代码中的反向波兰表示法非常有价值。它几乎只是将字符串转换为反向波兰表示法然后对其求值的实现。它非常易于使用、理解和添加新功能。包括源代码。试试看:以上就是《C#学习教程:计算存储在字符串中的算术表达式(C#)》的全部内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—intmySum=4*(80+(5/2))+2;varmyStringSum=mySum.toString();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
