例如:b="string a;";
如何 通过执行变量b 从而达到程序自动定义变量a ???

解决方案 »

  1.   

    动态编译。
    例:获取字符串所表示的逻辑意义 /*****************************************************************
        ** 文件名:       Eval.cs
        ** Copyright (c) 1999 -2003 
        ** 创建人:       Phoenix
        ** 创建日期: 
        ** 修改人:
        ** 修改日期: 
        ** 描 述:         获取字符串所表示的逻辑意义
        ** 版 本:1.0
        ******************************************************************/
        public class Eval
            {
            public static object GetValue(string value)
                {
                string codeSnippet = "using System; " + "\r\n" +
                                                "namespace CzG {" + "\r\n" +
                                                            " public class Eval" + "\r\n" +
                                                            " {" + "\r\n" +
                                                "       public Eval(){} " + "\r\n" +
                                                            "  public object GetValue()" + "\r\n" +
                                                            "  {" + "\r\n" +
                                                            "   return " + value + ";" + "\r\n" +
                                                            "  }" + "\r\n" +
                                                      " } }";
          
                CodeSnippetCompileUnit unit = new CodeSnippetCompileUnit(codeSnippet);
                CodeDomProvider compiler=new CSharpCodeProvider() ;
                //ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler();
                string[] referenceAssemblies={"System.dll"};
                CompilerParameters para = new CompilerParameters(referenceAssemblies ,"Eval.dll",false );
                //para.ReferencedAssemblies.Add("System.dll");
                para.GenerateInMemory = true;
                para.GenerateExecutable = false;
                //para.OutputAssembly = "Eval.dll";            Assembly asm = compiler.CompileAssemblyFromDom(para, unit).CompiledAssembly;            Type type = asm.GetType("CzG.Eval");
                MethodInfo mi = type.GetMethod("GetValue", BindingFlags.Public | BindingFlags.Instance);            object obj = asm.CreateInstance("CzG.Eval");
                object ret = mi.Invoke(obj, null);
                return ret;
                }
            }