调用编译器接口ICodeCompiler实现数学表达式计算

const string staticMethodName = "Calculate";
    Type _CompiledType = null;
    object _Compiled = null;
    object Evaluator(string Expression)
    {
        ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
        CompilerParameters cp = new CompilerParameters();
        cp.ReferencedAssemblies.Add("system.dll");
        cp.ReferencedAssemblies.Add("system.data.dll");
        cp.ReferencedAssemblies.Add("system.xml.dll");
        cp.GenerateExecutable = false;
        cp.GenerateInMemory = true;

        StringBuilder code = new StringBuilder();
        code.Append("using System; /n");
        code.Append("using System.Data; /n");
        code.Append("using System.Data.SqlClient; /n");
        code.Append("using System.Data.OleDb; /n");
        code.Append("using System.Xml; /n");
        code.Append("namespace Evaluator { /n");
        code.Append("  public class _Evaluator { /n");

        code.AppendFormat("    public object {0}() ", staticMethodName);
        code.Append("{ ");
        code.AppendFormat("      return ({0}); ", Expression);
        code.Append("}/n");

        code.Append("} }");

        CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());

        Assembly a = cr.CompiledAssembly;
        _Compiled = a.CreateInstance("Evaluator._Evaluator");

        MethodInfo mi = _Compiled.GetType().GetMethod(staticMethodName);

        return mi.Invoke(_Compiled, null);
    }

 

 

调用: Evaluator("(1+2)*3")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值