c#中實現類似js的Eval|.NET中執行Javascript(表達式是字符串的計算)

我們一般只知道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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章