C#执⾏Javascript脚本
前⼀阵⼦使⽤C#编写SCXML状态机,需要解析EMCScript表达式,使⽤了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);writeline函数
可以将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下载:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论