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# 任意輸入一段表達式,進行運算並輸出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.