在网上找到的源码,可是执行不了,请前辈们看看,
执行+-*/是可以的using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom.Compiler;
namespace JSProject
{
/// <summary>
/// 动态求值
/// </summary>
public class Evaluator
{
private static object _evaluator = null;
private static Type _evaluatirType = null;
private static readonly string _jscriptSource =
@"
class Evaluator{
public function Eval(expr:String):String
{
return eval(expr);
}
}
";
/// <summary>
/// 计算结果,如果表达式出错抛出异常
/// </summary>
/// <param name="statement">表达式,如"1+2+3+4"</param>
/// <returns></returns>
public static object Eval(string statement)
{
return _evaluatirType.InvokeMember("Eval", BindingFlags.InvokeMethod, null,
_evaluator, new object[] { statement});
}
static Evaluator()
{
//构造JScript的编译驱动代码
CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript"); CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true; CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters,_jscriptSource); Assembly assembly = results.CompiledAssembly;
_evaluatirType = assembly.GetType("Evaluator");
_evaluator = Activator.CreateInstance(_evaluatirType);
}
} public class Testing
{
static void Main()
{
Console.WriteLine(Evaluator.Eval("if(2<1) return false; else return true;"));
Console.ReadLine();
}
}
}
执行+-*/是可以的using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom.Compiler;
namespace JSProject
{
/// <summary>
/// 动态求值
/// </summary>
public class Evaluator
{
private static object _evaluator = null;
private static Type _evaluatirType = null;
private static readonly string _jscriptSource =
@"
class Evaluator{
public function Eval(expr:String):String
{
return eval(expr);
}
}
";
/// <summary>
/// 计算结果,如果表达式出错抛出异常
/// </summary>
/// <param name="statement">表达式,如"1+2+3+4"</param>
/// <returns></returns>
public static object Eval(string statement)
{
return _evaluatirType.InvokeMember("Eval", BindingFlags.InvokeMethod, null,
_evaluator, new object[] { statement});
}
static Evaluator()
{
//构造JScript的编译驱动代码
CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript"); CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true; CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters,_jscriptSource); Assembly assembly = results.CompiledAssembly;
_evaluatirType = assembly.GetType("Evaluator");
_evaluator = Activator.CreateInstance(_evaluatirType);
}
} public class Testing
{
static void Main()
{
Console.WriteLine(Evaluator.Eval("if(2<1) return false; else return true;"));
Console.ReadLine();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货