c#中实现类似js的Eval|.NET中执行Javascript(表达式是字符串的计算)
2011-05-12 14:00
851 查看
我们一般只知道javascript中有个eval方法,其实在c# 中也有这样一个方法,下面我们讲解c#中Eval的使用方法。
第一步在你的项目中添加Microsoft.Vsa和Microsoft.JScript两个程序集,下面我们就可以使用Microsoft.JScript下面的Eval方法了
Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
object ret = Microsoft.JScript.Eval.JScriptEvaluate(Expression, ve);
其中Expression为表达式,比喻说我们要实现1+28×678-38,那么就可以写成object ret = Microsoft.JScript.Eval.JScriptEvaluate("1+28×678-38", ve);得出的ret 就是您要的结果了,注意ret是个object,然后将其转换成您需要的类型就可以了!
下面一个例子希望对你有帮组:
using
public partial class JavaScriptEval : System.Web.UI.Page
{
public static Microsoft.JScript.Vsa.VsaEngine Engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
public static object EvalJScript(string JScript)
{
object Result = null;
try
{
Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
}
catch (Exception ex)
{
return ex.Message;
}
return Result;
}
public void Page_Load(object sender,EventArgs e)
{
// *** String Value
object Result = EvalJScript(@"('hello world: ' + new Date())");
Response.Write( Result.ToString() );
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** Return an integer or numeric - no conversion required
Result = EvalJScript(@"( 11 * 12)");
Response.Write(Result.ToString());
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** Date value - must be converted!
Result = EvalJScript(@"(new Date())");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name + "<br>");
// *** Must convert from DateObject to DateTime by coercing
DateObject dateObject = Result as DateObject;
Result = Microsoft.JScript.Convert.Coerce(Result,typeof(DateTime));
Response.Write("Converted to DateTime: " + Result);
Response.Write("<hr>");
// *** Block of code (last assignment is the return value)
Result = EvalJScript(@"var out = 'hello'; for ( var x = 1; x < 10; x++) { out = out + 'Line ' + x + '<br>'; }");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");
/// *** Closure - calling a JavaScript Function with return value
Result = EvalJScript(@"( function Test(inputParm) { return 'hello world ' + inputParm; } )");
/// *** Invoke the function and retrieve the result
Closure close = Result as Closure;
// *** This requires full trust
Result = close.Invoke(close, new object[1] { "Start with this bub..." });
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** JSON style object
Result = EvalJScript(@"( {""timeString"":'Time is: ' + new Date(),""dateValue"":new Date()} )");
JSObject obj = Result as JSObject;
Response.Write(Result);
// *** JavaScript style property array access can be used
object val = obj["dateValue"];
Response.Write(Microsoft.JScript.Convert.Coerce(val,typeof(DateTime)));
val = obj["timeString"];
Response.Write(val);
}
}
Microsoft.JScript;
第一步在你的项目中添加Microsoft.Vsa和Microsoft.JScript两个程序集,下面我们就可以使用Microsoft.JScript下面的Eval方法了
Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
object ret = Microsoft.JScript.Eval.JScriptEvaluate(Expression, ve);
其中Expression为表达式,比喻说我们要实现1+28×678-38,那么就可以写成object ret = Microsoft.JScript.Eval.JScriptEvaluate("1+28×678-38", ve);得出的ret 就是您要的结果了,注意ret是个object,然后将其转换成您需要的类型就可以了!
下面一个例子希望对你有帮组:
using
public partial class JavaScriptEval : System.Web.UI.Page
{
public static Microsoft.JScript.Vsa.VsaEngine Engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
public static object EvalJScript(string JScript)
{
object Result = null;
try
{
Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
}
catch (Exception ex)
{
return ex.Message;
}
return Result;
}
public void Page_Load(object sender,EventArgs e)
{
// *** String Value
object Result = EvalJScript(@"('hello world: ' + new Date())");
Response.Write( Result.ToString() );
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** Return an integer or numeric - no conversion required
Result = EvalJScript(@"( 11 * 12)");
Response.Write(Result.ToString());
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** Date value - must be converted!
Result = EvalJScript(@"(new Date())");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name + "<br>");
// *** Must convert from DateObject to DateTime by coercing
DateObject dateObject = Result as DateObject;
Result = Microsoft.JScript.Convert.Coerce(Result,typeof(DateTime));
Response.Write("Converted to DateTime: " + Result);
Response.Write("<hr>");
// *** Block of code (last assignment is the return value)
Result = EvalJScript(@"var out = 'hello'; for ( var x = 1; x < 10; x++) { out = out + 'Line ' + x + '<br>'; }");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");
/// *** Closure - calling a JavaScript Function with return value
Result = EvalJScript(@"( function Test(inputParm) { return 'hello world ' + inputParm; } )");
/// *** Invoke the function and retrieve the result
Closure close = Result as Closure;
// *** This requires full trust
Result = close.Invoke(close, new object[1] { "Start with this bub..." });
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");
// *** JSON style object
Result = EvalJScript(@"( {""timeString"":'Time is: ' + new Date(),""dateValue"":new Date()} )");
JSObject obj = Result as JSObject;
Response.Write(Result);
// *** JavaScript style property array access can be used
object val = obj["dateValue"];
Response.Write(Microsoft.JScript.Convert.Coerce(val,typeof(DateTime)));
val = obj["timeString"];
Response.Write(val);
}
}
Microsoft.JScript;
相关文章推荐
- C#中实现类似js的Eval方法
- c#中实现类似js的Eval方法(2011-03
- JavaScript eval() 函数,计算某个字符串,并执行其中的的 JavaScript 代码。
- C#中实现字符串表达式计算
- eval()函数:计算某个字符串,并执行其中的javascript 代码
- .Net实现表达式计算(公式) 表达式字符串
- c#中实现类似js的Eval方法
- 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
- .NET 实现Eval(文字列表达式计算)的3种实现方法。
- 在C#中解决动态计算表达式的问题(如字符串"Sin(1)+Cos(2)",执行并得出结果)
- javascript 实现类似C#中字符串的Trim()方法
- C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能
- C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
- 利用C#动态编译功能实现像Javascript中的Eval的功能来将一段字符串进行数学运算
- C#利用js脚本实现配置的文本表达式计算
- C#和SQL实现的字符串相似度计算代码分享
- C# 实现类似SMSS的执行脚本的功能
- 如何在C#里面象js一样可以直接计算字符串的值
- 【javascript基础】JS计算字符串所占字节数
- 取得一个字符串表达式的计算结果(实现方法二)