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;
}
}
}
C# 任意输入一段表达式,进行运算并输出
最新推荐文章于 2025-05-29 10:22:11 发布
本文介绍了一个使用C#动态编译技术实现的表达式计算程序。该程序能够读取用户输入的数学表达式,并通过动态编译的方式计算出表达式的结果。此方法避免了复杂的解析过程,提高了表达式计算的灵活性。

7760

被折叠的 条评论
为什么被折叠?



