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")