动态地生成用户输入的函数表达式(C#)
2008-10-11 08:42
330 查看
/article/4676176.html
C# code
C# code
C# code
// Expression.cs - 动态生成数学表达式并计算其值 // 表达式使用 C# 语法,可带一个的自变量(x)。 // 表达式的自变量和值均为(double)类型。 // 使用举例: // Expression expression = new Expression("Math.Sin(x)"); // Console.WriteLine(expression.Compute(Math.PI / 2)); // expression = new Expression("double u = Math.PI - x;" + // "double pi2 = Math.PI * Math.PI;" + // "return 3 * x * x + Math.Log(u * u) / pi2 / pi2 + 1;"); // Console.WriteLine(expression.Compute(0)); using System; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; using System.Text; namespace Skyiv.Util { sealed class Expression { object instance; MethodInfo method; public Expression(string expression) { if (expression.IndexOf("return") < 0) expression = "return " + expression + ";"; string className = "Expression"; string methodName = "Compute"; CompilerParameters p = new CompilerParameters(); p.GenerateInMemory = true; CompilerResults cr = new CSharpCodeProvider().CompileAssemblyFromSource(p, string. Format("using System;sealed class {0}{{public double {1}(double x){{{2}}}}}", className, methodName, expression)); if(cr.Errors.Count > 0) { string msg = "Expression(/"" + expression + "/"): /n"; foreach (CompilerError err in cr.Errors) msg += err.ToString() + "/n"; throw new Exception(msg); } instance = cr.CompiledAssembly.CreateInstance(className); method = instance.GetType().GetMethod(methodName); } public double Compute(double x) { return (double)method.Invoke(instance, new object [] { x }); } } }
C# code
// ExpressionTest.cs - 动态生成数学表达式并计算其值的测试程序 // 编译方法: csc ExpressionTest.cs Expression.cs using System; using Skyiv.Util; namespace Skyiv.Test { class ExpressionTest { static void Main(string [] args) { try { if (args.Length > 0) { Console.WriteLine("f(x): {0}", args[0]); Expression expression = new Expression(args[0]); for (int i = 1; i < args.Length; i++) { double x = double.Parse(args[i]); Console.WriteLine("f({0}) = {1}", x, expression.Compute(x)); } } else Console.WriteLine("Usage: ExpressionTest expression [ parameters ]"); } catch (Exception ex) { Console.WriteLine("错误: " + ex.Message); } } } }
相关文章推荐
- 动态地生成用户输入的函数表达式(C#)
- 动态地生成用户输入的函数表达式(C#)
- 动态地生成用户输入的函数表达式(C#) (转)
- [转] 动态地生成用户输入的函数表达式
- [转帖]C#如何使用正则表达式来校验字段串输入的系列函数
- DataGrid动态生成模板列,模板列里面有一个TextBox,如何获取用户在TextBox里面输入的值啊?
- C#中几个正则表达式匹配输入字符的函数
- C#结合正则表达式判断各种用户输入合法性
- Krpano学习:认识全景生成.bat文件及其相关配置文件(三) 在C#中修改.config文件内容(动态修改全景输入路径、名称等)
- c#中动态输入和计算 代数表达式
- C#结合正则表达式判断各种用户输入合法性
- C#结合正则表达式判断各种用户输入合法性
- 动态生成C# Lambda表达式
- 请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。
- 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。
- C#编程实现动态生成word文档
- C#(用函数判断输入的值是否是数字)
- RAML用户应遵循的C#与Web API代码生成模式
- 用Js Dom实现通过用户输入行数和列数,生成一个表格
- C#动态生成代码和程序集