日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 前端文檔 正文

C#?執行Javascript腳本的方法步驟_C#教程

作者:尋找無名的特質 ? 更新時間: 2022-03-23 前端文檔

前一陣子使用C#編寫SCXML狀態機,需要解析EMCScript表達式,使用了Jint庫(https://github.com/sebastienros/jint/),當時感覺與C#之間的數據轉換不是很方便。這兩天有時間又關注了一下,發現新的3.0版本有了很大改進,在這里介紹給大家,供參考。

首先要安裝nuget包,注意增加prerelease選項,安裝最新的版本,使用dotnet命令行指令如下:

dotnet add ?package Jint --prerelease

直接計算表達式:

Console.WriteLine("直接計算表達式:(1+2)*3");
var r1= e.Evaluate("(1+2)*3");
Console.WriteLine(r1);

字符串操作:

Console.WriteLine("字符串操作:'abc'.length");
var r2=e.Evaluate("'abc'.length");
Console.WriteLine(r2);

Console.WriteLine("-----------------------");
Console.WriteLine("字符串操作:'abc'.substr(2)");
var r3=e.Evaluate("'abc'.substr(2)");
Console.WriteLine(r3);

可以使用SetValue給JS變量賦值:

var e2 = new Engine()
    .SetValue("x", 1)
    .SetValue("y",2);
var r4=e2.Evaluate("x+y");
Console.WriteLine(r4);

可以使用對象進行C#和JS之間的數據交換:

var myobj= new Student {
    Name="張三"
};
Console.WriteLine(myobj.Name);
var e4 = new Engine()
    .SetValue("student", myobj)
    .Execute("student.Name = '李四'");
Console.WriteLine(myobj.Name);

可以將C#函數委托給JS引擎,在JS代碼中調用這些函數:

Console.Write("將CSharp函數設置給Js引擎");
var engine = new Engine()
    .SetValue("log", new Action<object>(Console.WriteLine));
 engine.Execute(@"
    function hello() { 
        log('Hello World');
    };
 
    hello();
");

也可以從CSharp 調用JS的函數:

Console.WriteLine("調用JS函數計算BMI");
var e5=new Engine()
    .Execute("function bmi(weight, height) { return weight/height/height; }");
Console.WriteLine(e5.Invoke("bmi",75,1.75));

可以引入CLI,從而在JS引擎中調用CLI中的函數:

Console.WriteLine("調用.Net函數寫入文件");
var e6 = new Engine(cfg => cfg.AllowClr());
e6.Execute(@"var f=System.IO.StreamWriter('sayhello.log');
        f.WriteLine('你好 !');
        f.Dispose();");

示例可以從github下載:https://github.com/zhenl/CSharpScriptDemo,本文示例在JSInCSharp項目中。

原文鏈接:https://www.cnblogs.com/zhenl/p/15756305.html

欄目分類
最近更新