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(二进制文件)

  • 引用解决方案中的dll。(右键单击>添加引用>浏览>NCalc.dll)
  • 编码

    使用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;
    
            }
    

    你为什么希望这能奏效?你读过你试图实例化的类型的文档了吗?@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;
    
            }