C# 计算数学表达式
伙计们,我正在计算一个字符串数学表达式 首先我导入了图书馆C# 计算数学表达式,c#,expression,calculator,evaluation,C#,Expression,Calculator,Evaluation,伙计们,我正在计算一个字符串数学表达式 首先我导入了图书馆 using System.Linq.Expressions; 然后在我的密码里我做到了 Expression e = new Expression("(450*5)+((3.14*7)/50)*100"); double result = e.Evaluate(); 然而,我得到的错误如下 无法创建抽象类或接口“System.Linq.Expressions.Expression”的实例 为什么上述方法不起作用 我如何评估这一点
using System.Linq.Expressions;
然后在我的密码里我做到了
Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
double result = e.Evaluate();
然而,我得到的错误如下
无法创建抽象类或接口“System.Linq.Expressions.Expression”的实例
为什么上述方法不起作用
我如何评估这一点?尝试使用NCalc:
Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
double result = e.Evaluate();
为了在c#中计算这样的表达式,必须使用Roslyn。下面是一个示例(我更改了此处的一段代码): 表达式仅允许您从代码创建语法树:
Expression<Func<int,int,int>> add = (x, y) => x + y;
var res = add.Compilie()(2,3);
表达式add=(x,y)=>x+y;
var res=add.compile()(2,3);
所以不能将字符串用作表达式的源代码,必须将其作为有效的c代码编写。可以使用。这是一个简单的.NET数学表达式解析器。我选择了Ncalc。
我将我的代码发布给未来的用户,他们将遇到和我一样的问题
1.下载Ncalc(二进制文件)
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;
}
你为什么希望这能奏效?你读过你试图实例化的类型的文档了吗?@Asad我希望它能工作,因为我在之前的一篇文章中提出了这个解决方案。在C语言中,没有像javascript的“eval method”那样的方法
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;
}