我有一个要求,用户可以在数据库中创建和存储条件
例如。如果(FB > 5000)则 100 否则 200
它工作正常用户可以创建公式,但我的主要问题是执行该公式
所以在运行时FB
被特定值替换并生成正确的字符串
即int a;如果(6000 > 5000){a=100}否则{a=200}
要在运行时执行上述方法,我使用过CSharpCodeProvider
CSharpCodeProvider c = new CSharpCodeProvider();
ICodeCompiler icc = c.CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
//cp.CompilerOptions = "optimize";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n");
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public double EvalCode(){\n");
sb.Append(condition);
sb.Append("return cond1; \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
//Log Errors
return 0;
}
System.Reflection.Assembly assembly = cr.CompiledAssembly;
object o = assembly.CreateInstance("CSCodeEvaler.CSCodeEvaler");
Type t = o.GetType();
MethodInfo mi = t.GetMethod("EvalCode");
object s = mi.Invoke(o, null);
它也可以正常工作,但我的问题是它花费了太多时间,即性能非常慢,所以有没有其他方法可以达到同样的效果???