C# 任意输入一段表达式,进行运算并输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入一段表达式:");
            string str = Console.ReadLine();
            double x=0;
            double y=0;
            double b = Calculate(s,x,y);
            Console.WriteLine("计算结果为"+b);
            Console.ReadLine();
           
        }
        public static double Calculate(string formula, double x,double y)
        {
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameter = new CompilerParameters();
            parameter.ReferencedAssemblies.Add("System.dll");
            parameter.GenerateExecutable = false; //<--不生成exe
            parameter.GenerateInMemory = true; //<--直接在内存运行
            CompilerResults result = provider.CompileAssemblyFromSource(parameter,
                GenerateCodeBlocks(formula));
            //动态编译(VisualStudio F5的时候也是做这个)
            if (result.Errors.Count > 0)
            {
               Console.WriteLine("error");
            }
            //编译成功
            double calculated = Convert.ToDouble(result.CompiledAssembly.GetType("demo.calculation").GetMethod("dowork").Invoke(null, new object[]{x,y}));
            //这里通过反射调
            return calculated;
        }

        static string GenerateCodeBlocks(string formula)
        {
            string code =
                "using System;" +
                "namespace demo" +
                "{" +
                   "public static class calculation" +
                   "{" +
                   "public static double dowork(double x, double y)" +
                   "{ return " + formula +
                   ";}}}"; //这里是将你的formula和代码片段拼接成完整的程序准备编译的过程。
            return code;
        }

    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值