下面的运行不对,该怎么改呢?           int x ,y;
           String kk = "sin(x)/x";
            x = 2 ;
            y = kk;//就是这怎么改?
            Console.WriteLine ("{0}",y);
            Console.ReadKey ;想编可可以画函数图像的小工具,可不知道怎么从文本框里获取输入的函数。

解决方案 »

  1.   

    http://www.cnblogs.com/skyivben/archive/2005/10/26/262133.html
    http://www.cnblogs.com/skyivben/archive/2005/11/01/266649.html
      

  2.   

    http://www.cnblogs.com/skyivben/archive/2005/10/31/265861.html// 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); 
          } 
        } 
      } 
    } // 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 }); 
        } 
      } 

     
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.CSharp;
    using System.CodeDom.Compiler;
    using System.CodeDom;
    using System.IO;namespace ConsoleApplication51
    {
        class Program
        {
            static void Main(string[] args)
            {
                String kk = @"using System;"
                  + "namespace XXX"
                  + "{"
                  + "    public class YYY"
                  + "    {"
                  + "        public void OutputString()"
                  + "        {"
                  + "            Console.WriteLine((Math.Sin(10)/10).ToString());"
                  + "        }"
                  + "    }"
                  + "}";            CSharpCodeProvider CCP = new CSharpCodeProvider();
                ICodeCompiler CC = CCP.CreateCompiler();            CompilerParameters CP = new CompilerParameters();
                CP.ReferencedAssemblies.Add("System.dll");
                CP.GenerateInMemory = true;            CodeSnippetCompileUnit CCU = new CodeSnippetCompileUnit(kk);
                CompilerResults CR = CC.CompileAssemblyFromDom(CP, CCU);            Type T = CR.CompiledAssembly.GetType("XXX.YYY");
                Object Obj = CR.CompiledAssembly.CreateInstance("XXX.YYY");
                T.GetMethod("OutputString").Invoke(Obj, null);            Console.Read();
            }
        }
    }
      

  4.   

    只要把你的kk嵌入构造好语句就可以
    namespace不要也可以