|
|
 | | From: | 游向明 | | Subject: | 请问谁有比较好的计算表达式的.net控件 | | Date: | Thu, 20 Jan 2005 00:57:06 +0800 |
|
|
 | 哪位有比较好的计算表达式的控件,就像是计算字符串"1+2+3"等于多少这样的控件。 如果有的话,希望告诉我下载地址,或者发到我邮箱中,先谢了~~~~~~~~~
|
|
 | | From: | Vince Yuan | | Subject: | Re: 请问谁有比较好的计算表达式的.net控件 | | Date: | Thu, 20 Jan 2005 08:18:52 +0800 |
|
|
 | // 给出一个表达式以及表达式里面所有变量的值。求出这个表达式的值。类似 javascript中的Eval(). using System; using System.CodeDom; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; using System.Text;
namespace TestApp { public class Test { public static void Main() { string expression = "125.8 + 208.2 + 120.90"; string ret = Eval.Calc(expression).ToString(); Console.Write("{0} = {1} ",expression, ret); } }
public class Eval { public static object Calc(string expression) { string className = "Calc"; string methodName = "Run";
// 创建编译器实例。 ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler()); // 设置编译参数。 CompilerParameters paras = new CompilerParameters(); paras.GenerateExecutable = false; paras.GenerateInMemory = true;
// 创建动态代码。 StringBuilder classSource = new StringBuilder(); classSource.Append("public class "+ className +"\n"); classSource.Append("{\n"); classSource.Append(" public object " + methodName + "()\n"); classSource.Append(" {\n"); classSource.Append(" return "+ expression + ";\n"); classSource.Append(" }\n"); classSource.Append("}");
System.Diagnostics.Debug.WriteLine(classSource.ToString());
// 编译代码。 CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
// 获取编译后的程序集。 Assembly assembly = result.CompiledAssembly;
// 动态调用方法。 object eval = assembly.CreateInstance(className); MethodInfo method = eval.GetType().GetMethod(methodName); return method.Invoke(eval, null); } } }
-- Vince
"游向明" wrote in message news:%2386CAdk$EHA.1084@tk2msftngp13.phx.gbl... > 哪位有比较好的计算表达式的控件,就像是计算字符串"1+2+3"等于多少这样的控件。 > > 如果有的话,希望告诉我下载地址,或者发到我邮箱中,先谢了~~~~~~~~~ > >
|
|
|