首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么将字符串中的内容作为代码执行

2012-08-09 
如何将字符串中的内容作为代码执行?如题,该字符串中的内容并非完整的函数,只是某几行代码而已。例如:string

如何将字符串中的内容作为代码执行?
如题,该字符串中的内容并非完整的函数,只是某几行代码而已。例如:

  string test="";
  string soure="test+1;"

  我要如何写代码,才能实现:将soure中的代码执行一次,然后赋给test?

  或者干脆一点,soure = "test =test+1;",如何将这串字符串取出来并将其作为代码执行?用C#实现。

[解决办法]
动态编译
[解决办法]

C# code
/// <summary>/// 采用动态编译,计算表达式的结果/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button6_Click(object sender, EventArgs e){    // 声明要计算C#代码,要求必须完整的C#代码    string strCode = @"                    using System;                    namespace ParseEx                    {                        public class ParseExC                        {                            public static double GetValue()                            {                                return 1+5*8-(Math.Sin(12)*2.5);                            }                        }                    }";    CodeDomProvider comp  = new CSharpCodeProvider();    CompilerParameters cp = new CompilerParameters();                StringBuilder codeBuilder = new StringBuilder();                codeBuilder.AppendLine(strCode);    cp.ReferencedAssemblies.Add("System.dll");    cp.GenerateExecutable = false;    cp.GenerateInMemory   = true;        CompilerResults cr = comp.CompileAssemblyFromSource(cp, codeBuilder.ToString());    if (cr.Errors.HasErrors)    {        MessageBox.Show("Error!");    }    else    {        Assembly a = cr.CompiledAssembly;        if (a != null)        {            Type t = a.GetType("ParseEx.ParseExC");            if (t != null)            {                // 因为是静态调用,不需要创建实例了                // object mode = a.CreateInstance("Mode");                MethodInfo mi = t.GetMethod("GetValue", BindingFlags.Static | BindingFlags.Public);                if (mi != null)                {                    double d = (double)mi.Invoke(null, null);                    MessageBox.Show(d.ToString());                }            }        }    }}
[解决办法]
使用CodeDom,微软提供的.net类,直接可以生成代码并编译,具体请MSDN

热点排行