当前位置:编程学习 > C#/ASP.NET >>

求一个C#能执行脚本类的

脚本里面包含整数4则运算和逻辑运算 --------------------编程问答--------------------
引用楼主 leehong0704 的回复:
脚本里面包含整数4则运算和逻辑运算


这是C#动态编译功能,就是用起来麻烦点。。。你也可以上网找逆波兰表达式的写法,专门应对运算和逻辑的。

/// <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());
                }
            }
        }
    }
}
--------------------编程问答--------------------  谢谢你了 我决定是lua脚本语言来实现的
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,