前一陣子使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/403482.html
標籤:.NET技术
