伙计我正在评估字符串数学表达式。
首先我导入了库
using System.Linq.Expressions;
然后在我的代码中,我做了,
Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
double result = e.Evaluate();
然而我得到的错误是 无法创建抽象类或接口的实例'System.Linq.Expressions.Expression'
为什么以上不起作用?
我如何评价这个?
答案 0 :(得分:3)
为了在c#中评估这样的表达式,你必须使用Roslyn。这是一个例子(我从这里更改了一段代码http://blogs.msdn.com/b/csharpfaq/archive/2011/12/02/introduction-to-the-roslyn-scripting-api.aspx):
using Roslyn.Scripting.CSharp;
namespace RoslynScriptingDemo {
class Program {
static void Main(string[] args) {
var engine = new ScriptEngine();
engine.Execute(@"System.Console.WriteLine((450*5)+((3.14*7)/50)*100);");
}
}
}
表达式只允许您从代码创建语法树:
Expression<Func<int,int,int>> add = (x, y) => x + y;
var res = add.Compilie()(2,3);
因此,您不能将字符串用作表达式的源,您必须将其写为有效的c#代码。
答案 1 :(得分:2)
尝试使用 NCalc :
Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
double result = e.Evaluate();
答案 2 :(得分:2)
我去了Ncalc。 我正在为将来会遇到像我这样的问题的用户发布我的代码。
1.下载Ncalc(二进制)http://ncalc.codeplex.com/releases/view/73656
代码
使用NCalc;
3.可以用作
public Double Calculate(string argExpression)
{
//get the user passed string
string ExpressionToEvaluate = argExpression;
//pass string in the evaluation object declaration.
Expression z = new Expression(ExpressionToEvaluate);
//command to evaluate the value of the **************string expression
var result = z.Evaluate();
Double results = Convert.ToDouble(result.ToString());
return results;
}
答案 3 :(得分:1)
您可以使用Mathos Parser。它是一个简单的.NET数学表达式解析器。